reactjs - 我正在运行计划的地图功能 - 但它最终会清除我的数组
问题描述
我有一个待办事项列表练习应用程序。
有优先级的任务,初始状态如下:
const [tasks, setTasks] = useState([
{
"text": "Task 1",
"priority": false,
},
{
"text": "Task 2",
"priority": false,
},
]);
我试图在某个时间运行计划作业以将所有优先级设置为 false - 即我将映射任务数组并将优先级设置为 false。
const clearPrioritiesJob = schedule.scheduleJob('0 0 0 * * *', () => {
setTasks(tasks.map((task) => {
console.log(tasks)
return { ...task, priority: false}}));
clearPrioritiesJob.cancel();
});
但是,当我运行它时,我可以看到 console.log 运行了 4 次 - 它表明优先级没有被清除,最终结果是一个空数组。
有关控制台中的日志,请参见下图
有人可以让我知道我做错了什么吗?
解决方案
使用您提供的代码,很难说哪里出了问题。
如果回调() => setState(...))
存储在某处,则可能您指tasks
的是setTasks(tasks.map(...))
.
为确保您始终获得最新状态,您可以这样做
setState((upToDateTasksState) => {
return upToDateTasksState.map(...);
});
推荐阅读
- docker - 我应该如何使用基于 RHEL 的容器支付 RHEL 许可证
- python - Python DataFrame如何从日期时间戳中拆分或提取日期
- oracle - Oracle SQL CURSOR 更新与加入和提交
- javascript - 如何将检测 127.0.0.1/8 IP 的正则表达式转换为更安全的正则表达式?
- java - Maven存档多个包含不同文件的战争
- kubernetes - TLS 引导,--token-auth-file,用户“system:anonymous”无法创建证书签名请求
- makefile - 从顶层目录调用 GNU Make
- android - 在 Android 中为定期工作管理器设置初始延迟
- apache-storm - Storm 1.2.2 Supervisor 也将 localhost 作为 nimbus 并且无法连接到它,尽管 nimbus 在另一台服务器中并且已经在storm.yaml 中指定
- javascript - 单击输入的标签会触发两次单击