解决redux中state更新是异步的问题

本文探讨了在React-Redux应用中遇到的状态更新异步问题,解析了Redux中action执行的同步性与store状态更新的异步性之间的差异。通过在action中返回Promise并结合组件中的then方法,有效解决了状态异步更新导致的读取旧状态问题。
摘要由CSDN通过智能技术生成

  在开发的过程中突然发现了一个非常诡异的问题,伪代码如下:

this.props.dispatch(updateData(value)) // 1
console.log(this.props.data)//2 状态没有更新
setTimeout(() => //3 状态发生了更新)

  于是猜想redux执行action应该是同步的,但是reducer中将新状态返回更新store数据仓库的过程应该是异步的.所以当上面1处修改store中的数据,2中获取时却不是更新的数据,因为此时store仓库的数据还未更新.

  通过搜索相关网页得到一些启示:组件通过react-redux封装后相当于包了一层高阶组件。而这一个高阶组件在redux里的state更新时会调用setState,所以它的store的数据仓库更新才会是异步的过程.

  解决方法:

  action中:

export const updateData = (value) => dispatch => {
  dispatch({
    type: 'UPDATE_DATA',
    value,
  });
  return Promise.resolve();//通过返回promise解决状态异步更新的问题
};

组件中使用:

this.props.actions.updateData(value).then(()=>{
    console.log(this.props.data) //状态更新了,获取到的是最新的状态值
    ...
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值