对 redux 存储的更改是不是同步发生? [复制]
Posted
技术标签:
【中文标题】对 redux 存储的更改是不是同步发生? [复制]【英文标题】:does changes to redux store occur synchronous? [duplicate]对 redux 存储的更改是否同步发生? [复制] 【发布时间】:2018-01-14 09:46:06 【问题描述】:si 它保证到 store.dispatch 返回时,状态已经改变了?如果是这样,那为什么不返回 newState 作为 dispatch 调用的结果呢?
store.dispatch( action1() );
store.dispatch( action2() );
一个例子,我将在 action1 中登录用户,然后我想触发另一个操作,该操作将使用 LOGEDIN 用户信息来进一步更改状态。所以我想确保 action2 不会触发,除非 action1 已经成功改变了状态。
那么,当 store.dispatch 返回时,这是否保证状态已经改变?
reducer 示例:
function reducer(state, action)
// please ignore that i will mutate state, just for sake of simplicity of example.
if(action.type==='ACTION1')
state.user_id = action.payload;
return state;
if(action.type==='ACTION1')
state.value2 = state.user_id * action.whatEver;
return state;
return state;
我目前的保护是我使用 React.component 来监控 user_id 的变化,然后我触发 action2,但如果 Redux Actions 是同步的,那么我可以在 action1 之后直接触发 action2 并减少我的样板。
【问题讨论】:
【参考方案1】:是的,默认情况下dispatch()
是 100% 同步的。中间件可以拦截动作并可能延迟它们或以其他异步方式修改行为。但除此之外,当dispatch
返回时,保证根reducer已经运行完毕,当前状态值已经被换出,并且订阅者已经得到通知。
【讨论】:
总是这样吗?以上是关于对 redux 存储的更改是不是同步发生? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
凡尘---middleware---redux-promise-middleware---凡尘