1

我的 redux 商店中的问题 操作似乎彼此卡住了。我正在遍历一组 thunk,每个 thunk 都会调用一些动作来显示它们已经开始、成功等。当这种情况发生时,一个动作会在 redux 开发工具中出现一秒钟,然后被删除。

如果我发布另一个动作,那么所有动作都会同时出现,就像集装箱船遵循既定的规定。

链接到问题的 gif

在这个 gif 中,我连接到一个测试数据库,然后调度了一些操作。我可以在控制台中看到这些操作,但不是 devTools。然后,我通过屏幕上的按钮发布另一个动作,所有动作都立即通过。

我正在寻找突变状态的实例,但所有减速器都通过以下方式将状态分解为一个新对象:

let newState = {...state}

有小费吗?

编辑:

  • 当我从按钮元素后面调度相同的操作时,它工作得很好。连接到事件发射器的事件侦听器正在调用日志干扰的代码......也许这与它有关?

  • 经过调试,我已经将问题追溯到redux replaceReducer方法。我按此顺序调用了 3 次。第一次和第二次调用工作正常,但在第三次 - 商店停止接收操作。

     store.injectReducer = (key, asyncReducer) => {
      storeTools.dispatchAction({type:"STORE_INJECT_REDUCER_" + key})
    
      store.asyncReducers[key] = asyncReducer;
      let combinedReducers = createReducer(store.asyncReducers);
      storeTools.dispatchAction({type:"STORE_INJECT_REDUCER_" + key})
    
      store.replaceReducer(combinedReducers);
      storeTools.dispatchAction({type:"RESET"})
    
      console.log("replaceReducer")
    

}

^^^ 此代码打印前 2 次调用的操作,但在第三次,它打印前两个操作,但不打印第三次。

4

1 回答 1

1

此错误是由在同一线程中多次调用“replaceReducer”引起的。根据我现在的理解 - 如果你在 forEach 循环中调用 replaceReducer ......你会很糟糕。

我的解决方案是创建一个分阶段多个减速器的函数 - 然后调用一次 replaceReducer。

愿未来的人们从这些知识中受益。

于 2021-03-31T20:30:49.030 回答