关于React项目的解决点

最近有这样一个需求,原本该页面部分数据是来自于location.state,现在想要通过url直接输入参数(例如id)从而与后端接口通过该id获取剩余的所需数据。

但是出现了一个问题,因为在componentDidMount这个生命周期中就需要使用从后端获取到的数据,原本设想是在componentDidMount中使用dispatch异步请求数据后,通过redux改变this.props后使用setstate赋值给this.state(一切为了规范!方便!)。

不幸的是,setState函数是一个异步的函数,而在componentDidMount中进行setstate将会让新设置的state的值在componentDIDMount中无法获取,具体原因如下:

componentDidMount钩子将会在组件挂载后及页面更新前发生,而当使用了setState意味着触发一次额外渲染,再走一次render,并且在页面更新前。

当使用了setState将发生以下事情:

  1. setState传入的partialState参数存储在当前组件实例的state暂存队列中。
  2. 判断当前React是否处于批量更新状态,如果是,将当前组件加入待更新的组件队列中。
  3. 如果未处于批量更新状态,将批量更新状态标识设置为true,用事务再次调用前一步方法,保证当前组件加入到了待更新组件队列中。
  4. 调用事务的waper方法,遍历待更新组件队列依次执行更新。
  5. 执行生命周期componentWillReceiveProps
  6. 将组件的state暂存队列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值