react生命周期分为三个阶段:
1.初始化
2.更新
3.销毁
- 1.初始化
- 1、getDefaultProps()
设置默认的props,也可以用dufaultProps设置组件的默认属性.- 2、getInitialState()
在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。此时可以访问this.props- 3、componentWillMount()
组件初始化时只调用,以后组件更新不调用,整个生命周期只调用一次,此时可以修改state。- 4、render()
1> react最重要的步骤,创建虚拟dom,进行diff算法,更新dom树都在此进行。此时就不能更改state了。
2> 该方法会创建一个虚拟DOM,用来表示组件的输出。对于一个组件来讲,render方法是唯一一个必需的方法。render方法需要满足下面几点:
**只能通过 this.props 和 this.state 访问数据(不能修改)
**可以返回 null,false 或者任何React组件
**只能出现一个顶级组件,不能返回一组元素
**不能改变组件的状态
**不能修改DOM的输出
3> render方法返回的结果并不是真正的DOM元素,而是一个虚拟的表现,类似于一个DOM tree的结构的对象。react之所以效率高,就是这个原因。- 5、componentDidMount()
组件渲染之后调用,只调用一次。
- 2.更新
- 1、componentWillReceiveProps(nextProps)
组件初始化时不调用,组件接受新的props时调用。- 2、shouldComponentUpdate(nextProps, nextState)
react性能优化非常重要的一环。组件接受新的state或者props时调用,我们可以设置在此对比前后两个props和state是否相同,如果相同则返回false阻止更新,因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比,节省大量性能,尤其是在dom结构复杂的时候- 3、componentWillUpdata(nextProps, nextState)
组件初始化时不调用,只有在组件将要更新时才调用,此时可以修改state- 4、render()
组件渲染- 5、componentDidUpdate()
组件初始化时不调用,组件更新完成后调用,此时可以获取dom节点。
- 3.卸载
- componentWillUnmount()
组件将要卸载时调用,一些事件监听和定时器需要在此时清除。
网友评论