javascript - 更新对象 Javascript 中的单个字段
问题描述
我需要更改problems
对象中特定字段的状态:
const [problems, setProblems] = useState({
first_name: false,
last_name: false,
city: false,
email: false,
password: false,
});
我在下面尝试了类似的方法,但它只更新了错误Object.keys(error.response.data)
列表的最后一个值:
.catch((error) => {
Object.keys(error.response.data).map((err) => {
setProblems({ ...problems, [err]: true });
});
});
error 是一个对象,其键名与对象中的键名相同problems
。我怎样才能正确地更新所有字段?
解决方案
它仅使用最后一个状态值更新状态是因为关闭了状态。
在组件的特定渲染中,状态是恒定的;为了看到更新的状态,组件必须重新渲染。
由于您setProblems()
在同一个渲染中多次调用:
setProblems({ ...problems, [err]: true });
problems
上述语句中的状态指的是调用时生效的相同状态。Object.keys(...).map(...)
简而言之,您每次调用时都在传播相同的状态。setProblems
解决方案
你需要做的是:
首先创建要保存在状态的对象
const newState = { ...problems }; Object.keys(error.response.data) .forEach((err) => newState[err] = true);
调用状态设置器函数
setProblems(newState);
推荐阅读
- linkedin - Linkedin v2 矢量资产上传错误 400
- c++ - 在 C++ 中迭代具有可变维度大小的 N 维矩阵
- java - 如何将下拉值存储到我的表中,以便显示选择的值?
- c - 工作队列启动、中断且从未完成导致 CPU 停顿
- if-statement - 如何用同一行的最大值划分一行的每个单元格
- javascript - jsPDF addImage 返回具有多个图像的相同图像
- php - 浏览器在后台触发 cli 脚本
- html - 我可以将数据从一个 HTML 文件发送到另一个文件吗?
- angular - 在 canDeactivate 方法中添加导航
- docker - 在 docker 中运行 ansible