【问题标题】:React How to trigger setState in all children component?React 如何在所有子组件中触发 setState?
【发布时间】:2021-05-27 04:54:13
【问题描述】:

如何从父组件同时更改所有子组件的状态?

const ParentComponent = () =>{
    <Child1/>
    <Child2/>
    <Child3/>

    <button>change children's state</button>
}
export default ParentComponent;

【问题讨论】:

标签: javascript reactjs react-component react-state react-state-management


【解决方案1】:

确实没有必要根据父母所做的事情来设置孩子的状态。这就是道具的用途。

const ParentComponent = () => {
  const [propToPass, setPropToPass] = useState('');
  return (
    <>
      <Child1 passedProp={propToPass} />
      <Child2 passedProp={propToPass} />
      <Child3 passedProp={propToPass} />

      <button onClick={() => setPropToPass('prop')}>change children's state</button>
    </>
  );
};

然后在您的子组件中,您可以使用该道具。

const Child1 = ({ passedProp }) => {
  return <div>passedProp</div>;
};

或者如果你真的想根据道具改变状态。 编辑:正如有人在 cmets 中指出的那样,这只会在 prop 更改时初始化状态而不更新状态。所以直接访问 props 会更好。

const Child1 = ({ passedProp }) => {
  const [someState, setSomeState] = useState(passedProp);
  return <div>someState</div>;
};

【讨论】:

  • 如果passedProp 更新,最后一个代码示例不会更改子状态。它仅使用第一次渲染期间提供的值初始化状态。要更新它,您必须明确地这样做,例如useEffect.
  • onClick={setPropToPass('prop')} 应该是onClick={() =&gt; setPropToPass('prop')}
猜你喜欢
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2021-04-20
  • 2020-02-22
相关资源
最近更新 更多