react中dispatch_react-redux中连续两次dispatch-actions有顺序吗?

本人看过redux的源码。你的问题跟桥接库react-redux这个库无关,单纯跟核心库redux有关。dispatch方法的实现代码很简单:

if (isDispatching) {

throw new Error('Reducers may not dispatch actions.')

}

try {

isDispatching = true

currentState = currentReducer(currentState, action)

} finally {

isDispatching = false

}

const listeners = (currentListeners = nextListeners)

for (let i = 0; i < listeners.length; i++) {

const listener = listeners[i]

listener()

}

可以看出在dispatch方法的内部实现中,是先算出最新的state后,再通知所有的订阅者,这是一个同步的过程。而多个dispatch()的调用也是同步的,标志位isDispatching就是一个佐证。

如果你正在使用的是原生的dispatch方法(也就是说没有被中间件增强过),那么你连续dispatch连个action,大概是这么一个同步流程:dispatch({type: "A"});

根据{type: "A"}来计算出最新的stateA

把最新的stateA给到所有的订阅者(订阅者一般负责更新界面)

dispatch({type: "B"});

根据{type: "B"}来计算出最新的stateB

把最新的stateB给到所有的订阅者

只要你现在是在我上面所说的前提下,并且你保证你上面提到的两条语句的执行

const status = yield select((state) => state.status);

const data = yield select((state) => state.data);

是在连续的dispatch调用之后,那么就不会出现你所说的“我从store里取到status是succeed,但是数据是空的,也就是data是空的。”的情况。

你可能感兴趣的:(react中dispatch)