我发现自己在一个组件上聚合了状态。通常情况下,我知道我将重新渲染节点,以便更改可以传播,并且状态不是全部。最近,我发现自己将道具的状态作为道具传递给第一个使用JSX spread attributes的孩子。只是要绝对明确的,这就是我的意思是:将州作为道具传递给孩子是好习惯吗?
var Child = React.createClass({
handleClick: function(){
this.props.owner.setState({
count: this.props.count + 1,
});
},
render: function(){
return <div onClick={this.handleClick}>{this.props.count}</div>;
}
});
var Parent = React.createClass({
getInitialState: function(){
return {
count: 0,
owner: this
};
},
render: function(){
return <Child {...this.state}/>
}
});
和它的作品(http://jsbin.com/xugurugebu/edit?html,js,output),你可以随时返回到该组件明白怎么回事,并保持状态尽可能小。
所以真正的问题是,如果这是/不是一个好的做法,为什么。
我现在可以考虑的缺点是,使用这种方法可能每个子组件总是会在所有者发生状态更改时重新呈现,如果是这种情况,我认为以上是可以使用的东西小的组件树。
当父母通过所有本地状态时,如同对传播属性所做的那样,这并不是很规范和容易遵循发送给孩子的内容。事实上,取决于组件的复杂性,可能难以推断发送的内容。我也很惊讶,孩子实际上需要父母的所有状态。 – WiredPrairie
是的,这取决于情况。要查看正在发送的内容,您只需查看父母即可。我喜欢这一点的原因,从国家的来源和来源可以清楚地看出。 – stringparser
如果家长是在本地定义的,那很简单。但随着项目范围的扩大,一个组件被多种父母使用,挑战可能会扩大。 – WiredPrairie