创建阶段的生命周期:
1:static defaultProps ={ }
这是用来给组件,初始化默认的props属性值的。(由于静态属性有一个特点:不new实例,静态属性也能被访问)
2:this.state = { }
这行代码,是写到生命周期函数中的;所以在 new一个组件实例的时候,第一个执行的生命周期函数,就是构造器 constructor ; 因此,在这个阶段,组件的私有状态数据,就已经初始化好了
3:componentWillMount
这是组件创建阶段的 第二个生命周期函数,此时组件将要被第一次渲染;还没有真正在内存中被渲染为一颗 虚拟DOM树
4:render
这是组件创建阶段的,第三个生命周期函数,此时,正在内存中渲染虚拟DOM树;当render函数执行完毕,则内存中的虚拟DOM树,第一次被完整的渲染完毕了
5:compoentDidMount
这是组件创建阶段的 最后一个生命周期函数,此时通过render渲染,在内存中渲染好的虚拟DOM树,已经挂载到了真正的页面上; 所以,这时候,页面才首次被渲染出来;当执行完这个函数,组件就脱离了创建阶段,进入到了运行阶段;
组件中,创建阶段的第一个生命周期函数constructor
作用:为组件初始化私有的数据
constructor (){ super() this.state() }第二个创建阶段的生命周期函数 componentWillMount
在此生命周期函数中,组件的props和state 数据,都可以被访问了;同时组件上的 自定义实例方法,也可以被正常访问了 相当于vue里的created 此时页面还没有被渲染
componentWillMount(){ }创建阶段的第三个生命周期函数 render
此时虚拟DOM正在被创建,当render被执行完,我们的虚拟DOM才创建到内存中
render(){}创建阶段最后一个生命周期函数componentDidMount
此时组件已经第一次 被渲染到页面上 React中的 componentDidMount 就相当于Vue里面的Mounted
componentDidMount(){ }运行阶段的生命周期:
运行阶段的第一个 生命周期函数 shouldComponentUpdate
使用这个函数, 可以 按需 更新页面;减少不必要的 DOM渲染 注意:在shouldComponentUpdate方法中,如果想要获取最新的state值,千万不要使用 this.state.***,会晚拿到一步你想要的,是上一次的旧数据 要通过形参 nextState进行获取
shouldComponentUpdate(nextProps,nextState){ //**必须**return 一个false或者true false代表不更新 true代表更新 return true }运行阶段第二个生命周期 componentWillUpdate
组件将要被更新
componentWillUpdate(){ }运行的第三个生命周期 render
表示又要根据最新的数据, 重新渲染虚拟DOM了
render(){}运行阶段最后一个生命周期 componentDidUpdate
组件完成了更新 此时页面时最新的
componentDidUpdate(){ }运行中的生命周期:
componentWillReceiveProps
组件的 props被改变,就会重新触发componentWillReceiveProps
componentWillReceiveProps(nextProps){ //组件将要接收新属性 注意:在这个生命周期函数中,想要获取最新的 props数据,不要使用this.props.***,因为它是上一次的props数据; 最新的应该 通过形参nextProps来获取 }