父母如何改变孩子的状态,孩子如何改变父母的状态

时间:2018-11-19 04:19:28

标签: reactjs

在当前项目中说,我们没有设置redux。 我们在层次结构中具有以下组件:

- p1
-- p2
--- p3
---- p4
----- c1

我希望p3组件更改c1的状态,而c1更改p3的状态。 有一个简单的方法可以做到这一点吗?

1 个答案:

答案 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});
}
相关问题