组件的几种状态
作为一个有状态的组件,那么一定就是有生命周期的,一个有状态组件的生命周期如图1-1(组件的生命周期图片来源):
由上图也可以看出组件一共有三种状态,分别是创建阶段,更新阶段,卸载阶段。
组件的创建阶段:指组件初始化之后挂载到DOM上,主要执行的有:constructor,render,componentDidMount。
constructor: 组件被创建时,会首先调用组件的构造方法。这个构造方法会接受一个props参数,props是从父组件传过来的属性对象,如果父组件没有传入属性而组件自身定义了默认属性,那么这个props指向的就是组件的默认属性。(constructor通常用于初始化组件的state以及绑定事件处理函数等)
render:React 的最基本方法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。在这个方法中,根据组件的props和state返回一个React元素,用于描述组件的UI,通常React元素使用JSX语法定义。(render是纯函数,不能在里面执行this.setState,会有改变组件状态的副作用)
componentDidMount:组件挂载到DOM上会调用的函数,调用次数为1
组件的更新阶段:组件被挂载到DOM后,组件的props和state可以引起组件更新(组件重新被渲染的过程)。主要执行的有:shouldComponentUpdate,render、componentDidUpdate。
shouldComponentUpdate:该方法决定了组件是否需要更新,它通过比较nextProps,nextState和当前的props以及state,当函数返回true时当前组件将继续执行更新过程,返回false则当前组件更新停止。
componentDidUpdate:组件更新后调用,来操作更新后的DOM。
组件的卸载阶段:组件从DOM中卸载,主要执行的是:componentWillUnmount
componentWillUnmount:该方法在组件被卸载前调用,主要是清理一些资源,比如清除组件中使用的定时器,清除componentDidMount中手动创建的DOM元素等,以避免引起内存泄露。