reactjs - React Hooks:从父级更改子级状态
问题描述
我在从父组件更改子组件的状态时遇到问题。这是一个示例沙箱。
https://codesandbox.io/s/parent-child-communication-hooks-34tjn?file=/src/components/Child.jsx
这是我的目标:当用户单击父组件中的“打开所有按钮”时,所有子组件将一起打开。关闭将关闭所有子项。
但是,仍然有必要控制每个孩子。
解决方案
您好,欢迎来到 StackOverflow。我在您的 CodeSandbox 中看到您开始使用 React Hooks。除了useState
钩子之外,我们还有useEffect
将在依赖项更改后触发的钩子。你可以通过使用这个钩子来实现。
只需向您的子组件添加一个新道具,该道具将包含父组件的状态值,我们将其称为 this parentValue
。这是您的父组件
//Parent.jsx
//your code
{childrentdata.map(x => (
<ChildComponent
name={x.name}
buttonOn={state.ParentOn}
parentValue={state.ParentOn}
/>
))}
然后,在您的子组件中添加钩子
useEffect(() => {
setState(prevState => ({ ...prevState, buttonOn: props.parentValue }));
}, [props.parentValue]);
该钩子将监视我们在数组依赖项中指定为第二个参数的道具和状态更改。因此,每次父切换更改时,它都会更改所有子切换。我做了一个更改,如果您注意到我在您setState
的 . 因此,使用此回调来防止副作用是一个好习惯。
推荐阅读
- python - 如何在 PySpark ML 管道中添加 udf 作为阶段?
- mapbox - 使用 Mapbox 优化 API 的多个驱动程序?
- reactjs - React Web App Routing 适用于桌面(包括移动开发视图),但不适用于移动浏览器
- javascript - 如何知道用户是否从不同的选项卡登录到我的 SAAS
- android - API 级别 26 及以上的内存问题 - 如何解决?
- php - LIMIT LEFT 连接到多行中最后更新的行
- sql - Oracle SQL - 仅显示净效应(不匹配)行
- amazon-web-services - AWS CDK:如何创建指向弹性 IP 的 Route53 记录?
- javascript - 如何在reactjs中保存条形图的先前状态和当前状态
- python - 在 Python 中验证 SAML2 断言(作为密码替换)