组件的生命周期:组件从创建到销毁的过程称为组件的生命周期。
组件的生命周期通常分为三个阶段:
- 组件的挂在阶段。
- 组件的更新阶段。
- 组件的卸载阶段。
组件的挂在阶段
组件在这个阶段被创建、初始化、挂在到DOM。包含四个周期函数:
- constructor
- componentWillMount
- render
- componentDidMount
constructor:必须包含super(props),这个过程可以定义state的初始状态,可以执行事件函数的this绑定。
componentWillMount: 组件挂载到DOM前调用,只会执行一次,且在其中使用this.setState不会引起组件的重新渲染,所以实际工作中很少用到,因为它里面所作的工作完全可以提升到constructor中去。
render 必要函数,作用是根据组件的state和props返回一个React元素,它是一个纯函数,不能执行有任何副作用的操作,所以不能调用this.setState方法。
componentDidMount组件被挂载到DOM后调用,只执行一次,能获取DOM结构,向服务器请求数据,在其中使用this.setState可以引起组件的重新渲染。
更新阶段
props和state(调用this.setState)的改变都会引起组件的更新。这个阶段包含5个生命周期函数:
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- render
- componentDidUpdate
componentWillReceiveProps:这个方法只有在props引起的组件更新中才会被调用,this.setState引起的组件更新不会触发该方法。
componentWillReceiveProps中调用的this.setState只有在render之后的生命周期才会指向新的state状态。
shouldComponentUpdate(nextProps,nextState):这个方法返回true时组件会继续更新过程,返回false时组件会停止更新过程。
componentWillUpdate(nextProps,nextState)组件render前调用执行。
shouldComponentUpdate和componentWillUpdate中不能调用setState,否则会引起循环调用,render永远无法被调用,组件无法正常渲染。
componentDidUpdate(prevProps,prevState)组件更新后被调用,prevProps、prevState代表更新前的props和state。
卸载阶段
组件从DOM上卸载,包含一个生命周期函数
- componentWillUnmount
清除组件中使用的计时器以及compoenentDidMount中手动创建的DOM等。
网友评论