reactjs - 同步响应更新状态
问题描述
我有一个Master
包含多个组件的Child
组件。子状态保存在 Master 中。孩子获得的第一个状态是FORM_LOADED。然后我的主组件中有以下代码。
const Master = (props) => {
const [formStates, setFormStates] = useState()
useEffect(() => {
setFormStates({...formStates, Master: "FORM_LOADED"})
},[])
render (
<>
<Child view="Model1" formStates={formStates} setFormStates={setFormStates} />
<Child view="Model2" formStates={formStates} setFormStates={setFormStates} />
<pre>{JSON.stringify(formStates, undefined, 4)}</pre>
</>
)
}
const Child = (props) => {
useEffect(() => {
props.setFormStates({...props.formStates, [props.view]: "FORM_LOADED"})
}, [])
render (
<p>{props.view}</p>
)
}
我的问题是状态变量formStates
总是得到:
{
Master: "FORM_LOADED",
Model2: "FORM_LOADED"
}
Model1
没有出现在formStates
. 如果我添加更多子组件,则只有最后一个组件反映在formStates
. 我怎样才能让 Model1 到formStates
?
解决方案
我不确定是否了解所有内容,但在 setState() 方法中您可以获得旧值。你可以这样做:
useEffect(() => {
props.setFormStates((oldVal) =>({...oldVal, ...props.formStates, [props.view]: "FORM_LOADED" }));
});
return <p>{props.view}</p>;
};```
推荐阅读
- unity3d - 用于创建可以实时检测和跟踪随机对象位置的移动应用程序的技术?
- javascript - 如何使用 if & for 函数从 firestorage 数组值中查找特定行
- r - RShiny:与服务器断开连接
- docker - wait-for-it.sh 对于 Pentaho 服务器没有完全工作(8080 在服务器准备好登录之前就启动了)
- python - 在新的 docker 用户中处理 python 包
- arrays - 如何在没有循环的情况下获取过滤数组中元素的位置
- vue.js - 如何使用单独的 JS 函数过滤/搜索元素 UI 表
- python - 带有条件“方法”对象的 Drop Row 在 Pandas 中不可下标
- environment-variables - 如何在 Geoserver 中更改系统变量
- haskell - 可存储类型的确切标准是什么?