React类组件生命周期

初始化阶段

(constructor:如果不初始化state或不进行方法绑定,可以不需要为组件实现构造函数,是类的构造函数)

componentWillMount:render之前最后一次修改状态的机会

render:只能访问this.props和this.state,不允许修改状态和DOM输出

componentDidMount:成功render并渲染完成真实DOM之后触发,可以修改DOM,推荐在这个函数中完成数据请求、订阅函数的调用、设置setInterval等

运行阶段

componentWillReciveProps:父组件修改属性触发

shouldComponentUpdate:返回false会阻止render调用

componentWillUpdate:不能修改属性和状态

render:只能访问this.props和this.state,不允许修改状态和DOM输出

componentDidUpdate:可以修改DOM

销毁阶段

componentWillUnmount:在删除组件之前进行清理操作,比如计时器和事件监听器

老生命周期的问题

componentWillMount:新版本的React采用的是异步渲染,在render执行之前,这个函数可能会被执行多次,同时如果在这里绑定事件,将无法解绑,导致内存泄漏,不够安全和高效。

componentWillReciveProps外部组件多次频繁更新传入多次不同的props,会导致不必要的异步请求。

componentWillUpdate更新前记录DOM状态,在这个函数中进行一些数据处理,如果与componentDidUpdate相隔时间过长,会导致状态不准确

新生命周期的替代

getDerivedStateFromProps(nextProps,prevState):第一次的初始化组件以及后续的更新过程中(包括自身状态更新以及父传子),返回一个对象作为新的state,返回null则说明不需要再这里更新state。是一个静态方法,内部的this指向的是类而不是对象实例,所以不能通过this来访问class的属性,要保持其纯函数的特点。

getSnapshotBeforeUpdate(prevProps, prevState):取代了componentWillUpdate,触发事件为update发生的时候,在渲染dom之前返回一个值,它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置),作为componentDidUpdate的第三个参数。

react中性能优化

shouldComponentUpdate(nextProps, nextState):返回一个布尔值,控制组件自身或者子组件是否需要更新,尤其在子组件非常多的情况下,需要通过该方法进行性能优化。

PureComponent:可以比较新props跟旧props,新的state和旧的state(值相等,或者对象含有相同的属性且属性值相等(浅比较)),决定shouldComponentUpdate返回true或者false,从而决定要不要调用render。(如果state或props会一直发生改变,PureComponent并不会比较快,shallowEqual也需要花时间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值