Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React和Redux:将父组件作为道具传递给其子组件是否存在任何性能问题/可能的副作用_Javascript_Reactjs_Design Patterns_Redux - Fatal编程技术网

Javascript 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()

我正在回顾React-Redux代码库中的一些代码,在很多情况下,父智能组件作为道具传递给子组件:

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
功能