React新生命周期--getDerivedStateFromProps、getSnapshotBeforeUpdate

本文介绍了React中旧的生命周期方法,如componentWillMount、componentWillReceiveProps和componentWillUpdate,以及它们在新版本中被替换的getDerivedStateFromProps和getSnapshotBeforeUpdate。重点讨论了getDerivedStateFromProps的使用场景,包括处理多数据源驱动的状态更新和避免异步操作。同时,文章提出了在组件设计时遵循Presentational和Container Components原则的重要性,以及如何在componentDidUpdate中适当地处理异步操作。
摘要由CSDN通过智能技术生成

在说新的生命周期之前,我们先了解下原来的生命周期:

 

 

  1. 挂载卸载过程
    1.1.constructor()
    constructor()中完成了React数据的初始化,它接受两个参数:props和context,当想在函数内部使用这两个参数时,需使用super()传入这两个参数。
    注意:只要使用了constructor()就必须写super(),否则会导致this指向错误。

1.2.componentWillMount()
componentWillMount()一般用的比较少,它更多的是在服务端渲染时使用。它代表的过程是组件已经经历了constructor()初始化数据后,但是还未渲染DOM时。

1.3.componentDidMount()
组件第一次渲染完成,此时dom节点已经生成,可以在这里调用ajax请求,返回数据setState后组件会重新渲染

1.4.componentWillUnmount ()
在此处完成组件的卸载和数据的销毁。

  • clear你在组建中所有的setTimeout,setInterval
  • 移除所有组建中的监听 removeEventListener
  • 有时候我们会碰到这个warning:
Can only update a mounted or mounting component. This usually
means you called setState() on an unmounted component. This is a   no-op. Please check the code for the undefined component.

原因:因为你在组件中的ajax请求返回setState,而你组件销毁的时候,请求还未完成,因此会报warning
解决方法:

componentDidMount() {
    this.isMount === true
    axios.post().then((res) => {
    this.isMount && this.setState({   // 增加条件ismount为true时
      aaa:res
    })
})
}
componentWillUnmount() {
    this.isMount === false
}
  1. 更新过程
    2.1. componentWillReceiveProps (nextProps)
  • 在接受父组件改变后的props需要重新渲染组件时用到的比较多
  • 接受一个参数nextProps
  • 通过对比nextProps和this.props,将nextProps的state为当前组件的state,从而重新渲染组件
componentWillReceiveProps (nextProps) {
    nextProps.openNotice !== this.props.openNotice&&this.setState({
        openNotice:nextProps.openNotice
    },() => {
      console.log(this.state.openNotice:nextProps)
      //将state更新为nextProps,在setState的第二个参数(回调ÿ
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值