Javascript React和Redux:将父组件作为道具传递给其子组件是否存在任何性能问题/可能的副作用
我正在回顾React-Redux代码库中的一些代码,在很多情况下,父智能组件作为道具传递给子组件:Javascript React和Redux:将父组件作为道具传递给其子组件是否存在任何性能问题/可能的副作用,javascript,reactjs,design-patterns,redux,Javascript,Reactjs,Design Patterns,Redux,我正在回顾React-Redux代码库中的一些代码,在很多情况下,父智能组件作为道具传递给子组件: import React from 'react'; import Child from '../components/Child'; export default class Parent extends React.Component { constructor(props) { super(props); } //... render()
import React from 'react';
import Child from '../components/Child';
export default class Parent extends React.Component {
constructor(props) {
super(props);
}
//...
render() {
return <Child parent={this}/>;
}
}
从“React”导入React;
从“../components/Child”导入子项;
导出默认类父级扩展React.Component{
建造师(道具){
超级(道具);
}
//...
render(){
返回;
}
}
乍一看,这里的意图似乎是向子组件公开父组件的道具/状态/方法。这与我过去在React中使用的许多设计模式背道而驰,但我不确定这是否值得在代码评审中提出(它已经部署到QA中)。从技术上讲,它是有效的(孩子可以调用这个.props.parent[method],等等),并且如果您将单独的处理程序/props/(local)状态片段传递给孩子,则可以显著减少所需的代码行数。我知道有缺点(在一种情况下,父属性与reducer同名,因此在子组件中,不清楚这个.props['reducerName']是否指React组件或映射的状态片),但我不能确定缺点是否超出了表面级别
这样的操作是否会在子组件中产生不必要的重新加载/差异检查的风险?React是否需要递归地序列化组件,从而由于循环引用而产生大量开销?除了我认为它看起来不对之外,还有什么我可以指出的吗?我可以想到一些事情,为什么这可能不是一个好主意:
- 这将在父组件和组件之间创建非常紧密的耦合。此外,我们应该尽量为抽象模块提供最少的数据量。我们称之为最低特权原则。在这里,很多信息被传递到子组件,这些信息将不会被使用,甚至可以通过多种方式被滥用
- 当子组件更改日期对象上的某些内容时,这可能是一个非常糟糕的主意:例如:
render() { return ( <React.Fragment> <ChildOne parent={this}/>; <ChildTwo parent={this}/>; </React.Fragment> ) }
现在,render(){ 返回( ; ; ) }
组件可以执行以下操作:ChildOne
this.props.parent.clickHandler=this.anotherHandler
这将中断ChildTwo
功能