首页 > 解决方案 > 我正在运行计划的地图功能 - 但它最终会清除我的数组

问题描述

我有一个待办事项列表练习应用程序。

有优先级的任务,初始状态如下:

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 次 - 它表明优先级没有被清除,最终结果是一个空数组。

有关控制台中的日志,请参见下图

日志中的空数组

有人可以让我知道我做错了什么吗?

标签: reactjs

解决方案


使用您提供的代码,很难说哪里出了问题。

如果回调() => setState(...))存储在某处,则可能您指tasks的是setTasks(tasks.map(...)).

为确保您始终获得最新状态,您可以这样做

setState((upToDateTasksState) => {
   return upToDateTasksState.map(...);
});

推荐阅读