Redux 和 Redux thunk 不同步

big*_*olf 0 reactjs redux redux-thunk react-redux

我使用 redux 的假设是调度操作是一个同步任务。

fire action 1 - > store updated
fire action 2 -> store updated
Run Code Online (Sandbox Code Playgroud)

在我目前正在进行的一个项目中,我有一个产品定制器,允许一些用户选择,他们可以下多个订单,但如果他们只订购当前选择并选择“购买”,我会触发“addOrder”,将他们的选择添加到 orders 数组,然后是“purchase”操作,这是一个将存储在 redux 中的订单提交到我的购物车 API 的 thunk。

我预计我将能够在每次操作后可靠地依赖商店处于一致状态,因此当第二个操作触发时,它将具有状态,就像它之前的第一个常规操作触发后一样,但没有骰子。

  • 我对 redux 的期望和理解不正确吗?
  • 如果是这样,redux thunk 是否以某种方式在正常调度之外起作用?

在我的连接组件中,我调度每个动作:

//.... inside component
purchase = () => {
  this.props.addOrder(); // regular action
  this.props.purchase(); // thunk
};
// ... rest of component
Run Code Online (Sandbox Code Playgroud)

mar*_*son 8

是的,调度总是100% 同步的,除非被中间件改变。是的,默认情况下,您可以getState()在调度后再次调用以获取更新的状态:

function checkStateAfterDispatch() {
    return (dispatch, getState) => {
        const firstState = getState();
        dispatch({type : "FIRST_ACTION"});

        const secondState = getState();

        if(secondState.someField != firstState.someField) {
            dispatch({type : "SECOND_ACTION"});
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)

  • Redux 核心中不存在竞争条件。如果您获得“先前”状态,那是因为您添加到应用程序中的某些中间件正在延迟分派操作到达减速器并使其异步。 (2认同)