reactjs - 使用 prevState 更改对象数组中的值不会返回预期值
问题描述
我正在使用以下方法尝试将 task.isComplete 的值更改为 !task.isComplete onClick。
handleComplete = (event) => {
event.preventDefault();
this.setState(
(prevState) => ({
listOfTasks: prevState.listOfTasks.map((task) => {
if (task.id === event.target.id) {
task.isComplete = !task.isComplete;
console.log(task);
}
return task;
}),
}),
() => console.log(this.state.listOfTasks)
);
};
单击按钮时,2个日志是:
{nameOfTask: "aaaa", isComplete: true, id: "1610746018062"}
TodoListTest.js:54
[{…}]
0: {nameOfTask: "aaaa", isComplete: false, id: "1610746018062"}
length: 1
__proto__: Array(0)
React 似乎只考虑第二个日志状态,所以我没有得到预期的变化,在操作结束时不完整地变为 true。
解决方案
您需要制作task
对象的浅表副本以更新其isComplete
属性。
handleComplete = (event) => {
event.preventDefault();
this.setState(
(prevState) => ({
listOfTasks: prevState.listOfTasks.map((task) => {
if (task.id === event.target.id) {
return {
...task,
isComplete: !task.isComplete
};
}
return task;
})
}),
() => console.log(this.state.listOfTasks)
);
};
推荐阅读
- javascript - 预加载器在启动 HTML 站点之前加载所有资产
- sql - Sql,如何得到这些结果?
- visual-studio-code - 如何更改 VS Code 中的块关系线颜色
- java - R.layout.activity_main,NoClassDefFound 错误
- ffmpeg - 使用 ffmpeg 转换 SEC 文件
- python - 超出最大递归深度:Python Azure ServicePrincipalCredentials
- google-apps-script - Google HtmlService 对话框未显示
- performance - Aws S3 wget vs 分块下载速度
- c# - 将控件插入到特定位置的另一个控件中?
- javascript - 如何将新值传递给打字稿中新创建的对象