首页 > 解决方案 > 当我调用一次时,我的减速器被触发了两次。当我尝试修复它时有一些奇怪的东西

问题描述

这是我的代码。演示站点在这里

在演示网页上,我有 2 个按钮,1 个是“开始”按钮,另一个是“返回”按钮。假设当我单击“go”按钮时,当前值将按以下格式显示在控制台中:

before:{"a":[12,27],"b":[63,14]}
after:{"a":[75,27],"b":[63,14]}

不幸的是,实际结果如下:

before:{"a":[12,27],"b":[63,14]}
after:{"a":[75,27],"b":[63,14]}
before:{"a":[12,27],"b":[63,14]}
after:{"a":[75,27],"b":[63,14]}

当我在组件中评论以下DEF行时:

setTimeout(()=>{
  setContextValue({undoUtil});
},10)

然后,当前值将以正确的格式显示在控制台中。但是,它不会触发屏幕布局刷新。

我该如何解决这个问题?

标签: javascriptreactjsuse-reducer

解决方案


你到底想做什么?这是非常不清楚的。您看到它在控制台中登录两次的原因是因为您有两次调用undoUtil.set

    setTimeout(() => {
      temp["a"][0] = 75;
      undoUtil.set(temp);
    }, 0);

    setTimeout(
      ()=>{
        temp['a'][1]=20;
        undoUtil.set(temp);
      }
    ,0);

为什么 setTimeout 的?这是怎么回事?

不是答案,我知道,但评论太长了。


推荐阅读