Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 将状态作为道具传递给孩子的良好实践是什么?_Javascript_Reactjs - Fatal编程技术网

Javascript 将状态作为道具传递给孩子的良好实践是什么?

Javascript 将状态作为道具传递给孩子的良好实践是什么?,javascript,reactjs,Javascript,Reactjs,我发现自己在一个组件上聚合状态。通常,我知道的节点将重新渲染,以便更改可以传播,并且状态不会到处都是。最近,我发现自己将这个组件的状态作为道具传递给它的第一个孩子,大部分孩子都在使用它。我想说清楚,这就是我的意思: var Child=React.createClass({ handleClick:function(){ this.props.owner.setState({ 计数:this.props.count+1, }); }, render:function(){ 返回{this.pro

我发现自己在一个组件上聚合状态。通常,我知道的节点将重新渲染,以便更改可以传播,并且状态不会到处都是。最近,我发现自己将这个组件的状态作为道具传递给它的第一个孩子,大部分孩子都在使用它。我想说清楚,这就是我的意思:

var Child=React.createClass({
handleClick:function(){
this.props.owner.setState({
计数:this.props.count+1,
});
},
render:function(){
返回{this.props.count};
}  
});
var Parent=React.createClass({
getInitialState:函数(){
返回{
计数:0,
业主:这个
};
},
render:function(){
返回
}
});
而且它是有效的(),您可以随时返回到这个组件来了解发生了什么,并尽可能地将状态保持在最小

因此,实际的问题是,如果这是/不是一个好的实践,以及为什么

目前我能想到的缺点是,使用这种方法,当所有者的状态发生变化时,可能每个子组件都会重新渲染,如果是这种情况,我认为上面的方法可以用于小组件树。

是的

状态应该只在顶级元素上设置,这样可以确保数据只在组件中单向流动

请记住,React将只渲染自上次渲染以来所做的更改,如果子元素的某些部分未被修改,它们将不会重新渲染到DOM


React在他们的文档中有一个标题为的部分。

没错!我没有想到差异。因此,您要说的是,diff算法将负责重新渲染的意义,因此,即使它传播,它也只会确保将那些实际有一些更改的重新渲染到DOM。我认为,如果这种情况持续下去,我会测量一些东西,并这样做,以确定这种方法会发生什么。@stringparser Correct。React使用虚拟DOM来区分任何更改。然后这些更改,并且只有这些更改才会呈现到真正的DOM。在jsperf上有许多React呈现测试,比如,尽管我同意这一点,并且一直都在做,但我觉得这篇文章中的这句话很有趣“它是通过道具从父母那里传来的吗?如果是这样的话,它可能不是state。当父对象传递所有本地状态时,它不是很规范,也不容易遵循发送给子对象的内容,就像您对spread属性所做的那样。事实上,根据组件的复杂性,可能很难对发送的内容进行推理。我也会感到惊讶的是,孩子实际上需要父母的所有状态。是的,这取决于情况。要查看发送的内容,您只需查看父级。我喜欢这样做的原因是很清楚状态的来源和呈现方式。如果父级是在本地定义的,这很容易。但是,随着项目范围的扩大,一个组件被多种类型的家长使用,挑战可能会扩大。是的,对于“附近”的组件来说是不错的。尽管在大型层次结构中追踪从一个组件传播到下一个组件的道具要比在任何情况下从您所在的组件中查看
this.props.owner
都要困难。