对 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,但如果 R​​edux Actions 是同步的,那么我可以在 action1 之后直接触发 action2 并减少我的样板。

【问题讨论】:

【参考方案1】:

是的,默认情况下dispatch() 是 100% 同步的。中间件可以拦截动作并可能延迟它们或以其他异步方式修改行为。但除此之外,当dispatch返回时,保证根reducer已经运行完毕,当前状态值已经被换出,并且订阅者已经得到通知。

【讨论】:

总是这样吗?

以上是关于对 redux 存储的更改是不是同步发生? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

react redux 同步调用

Redux状态更改后,简单的React组件不会更新

Redux - 异步 - 输入字段更改时的 POST 状态

凡尘---middleware---redux-promise-middleware---凡尘

发生故障转移时,MySQLFabric 是不是支持 mysql 复制半同步(5.7 版本)?

redux thunk 中的 getState() 是不是会更改实际状态