应对:如何将子组件的状态设置为其父组件的状态?

时间:2020-08-25 22:18:01

标签: reactjs state react-props setstate

我希望子组件的状态随着父组件的状态更新而更新。对父状态变量的任何更改都应反映在孩子的状态中。我该怎么办?

谢谢!

编辑:

我的组件按以下方式排列。我想从子代2访问父代的状态。通过将子代1的状态设置为父代的状态,我将能够执行此操作。

父母->孩子1->孩子2

2 个答案:

答案 0 :(得分:0)

您可以将所需的父状态部分作为道具传递给孩子。 然后,每次父状态更改时,子项将使用正确的值重新呈现。

如果您需要从孩子内部更改状态,则取决于您想要的行为。

您可以通过传递回调函数作为道具来使孩子改变父母的状态(您可以将用来改变父母中的状态作为道具的函数传递给孩子)

或者,您可以通过使用useEffect或ComponentDidUpdate侦听prop的更改,使子状态在更改后重置为父状态。

useEffect(() => { setState(props.partOfparentState)},[props.partOfparentState])

ComponentDidUpdate(prevProps) {
    if(previousProps.partOfParentState != props.partOfParentState) {
        partOfParentStatethis.setState({state:props.parpartOfParentStatetOfParentState})
    }
}

您还可能希望通过更复杂的useEffect可以实现其他行为。

答案 1 :(得分:0)

状态和道具

React DOM将元素及其子元素与上一个元素进行比较, 并且仅应用将DOM引入到 所需状态。

react中的数据流是“单向”或“自上而下”的, 任何状态始终归某个特定组件所有,任何数据或 从该状态派生的UI仅会影响“以下”组件 那棵树。

如果您将组件树想象为道具的瀑布,则每个 组件的状态就像一个附加的水源 一个任意点,但也向下流动。

这就是为什么状态通常被称为局部状态或封装状态的原因。它不是 拥有和设置该组件以外的任何组件都可以访问。 @reactjs

因此,您应该将状态传递给子组件,也称为prop

编辑:

层次结构将如下所示: App( state -date)=> Child1( prop date,将相同的 prop 传递给下一个孩子)=> Child2(从他的父母- Child1 获得date

示例(基于Class Components ):

<App>:

应用程序的根目录。

<ClockList={this.state.date} />

<ClockList>:

注意,我们正在使用道具

<Clock={this.props.date} />

<Clock>:

import React from "react";

const Clock = (props) => {
  // Object Destructuring can also be done in the function itself.
  const { date } = props;
  return (
    <div className="container">
      <p>{date}</p>
    </div>
  );
};

export default Clock;