如何同步更新我的 redux store?

How to update my redux store synchronously?

我有一个函数在很短的时间内被分派了两次。假设第一次调用准时 X,第二次调用准时 Y。其中 Y > X 且 X 和 Y 之间的差异为 5 毫秒 或更短。

在时间 Y 进行的调用首先更新商店,然后在时间 X 进行的调用。所以我的商店正在更新过时的数据。如何克服这种情况?

我正在使用 redux-thunk。

我假设你的问题是第一个异步调用的结果到达第二个异步调用(具有优先级)的结果已经到达之后。

处理此问题的总体思路是,您需要能够跟踪 latest/most 最近的调用,而不是其他应忽略且不再影响状态的过时调用。

要解决此问题,请将 Date.now() 的值保存在您的状态中,以记住 最近的请求 何时开始。在 thunks 中,您可以访问 getState,因此您可以检查 当前 请求是否仍然是最近启动的请求。

伪代码:

const myThunk = () => async (dispatch, getState) => {
    const startedAt = Date.now();

    // this needs to write state.mostRecentRequestStartedAt = action.payload.startedAt; in the reducer
    dispatch(requestStarted(startedAt));
    
    const result = await doSomethingAsync();

    // At this point, other more recent requests might have started!
    const { mostRecentRequestStartedAt } = getState();
    if (startedAt === mostRecentRequestStartedAt) {
        dispatch(saveResult(result));
    } else {
        // result is from an outdated request. Ignore it or do something else here.
    }
};