在当前项目中说,我们没有设置redux。 我们在层次结构中具有以下组件:
- p1
-- p2
--- p3
---- p4
----- c1
我希望p3组件更改c1的状态,而c1更改p3的状态。 有一个简单的方法可以做到这一点吗?
答案 0 :(得分:0)
从P3更改C1的状态:
p3组件可以通过将其向下传递的道具更改为p4来更改c1的状态,该道具必须将其向下传递至c1的道具进行更改。在c1中,您将通过componentWillReceiveProps检测到道具更改,并在此函数中根据从p3一直传递的道具设置新的c1状态:
// in c1
componentWillReceiveProps(newProps) {
this.setState({ someC1Data: newProps.someP3Data });
}
从C1更改P3的状态:
这可以通过使用回调来完成。 c1的属性将是一个回调,例如changeParent3State(someC1Data),因此在c1中,只要您想更改p3的状态,就可以调用this.props.changeParent3State(someC1Data)。您将在p4中具有相同的函数回调,以便p4再次通过this.props.changeParent3State(someC1Data)接收c1的函数调用,并且p4对该父树进行相同的调用。 p3组件现在已经接收到c1的数据,并且在函数实现中,可以根据c1的数据更改其状态(如果提供了任何数据):
// in p3
changeParent3State(someC1Data) {
this.setState({ someP3Data: someC1Data});
}