React 生命周期

作者: 南风知我意ZD | 来源:发表于2019-06-08 14:12 被阅读4次

React生命周期如下图所示:


React生命周期

如上图,react生命周期主要可以分组件挂载、组件更新及组件卸载三个部分。

一、组件挂载

组件挂载主要是完成组件状态的初始化,设计两个生命周期函数:componentWillMount和componentDidMount。主要包含以下几个点:

  1. static propTypes={}static defaultProps={}: 分别定义了组件的props类型检查和默认参数。static表明这两个属性被声明为静态属性,意味着从类外面也可以访问他们,比如:类名.propTypes。

  2. constructor(): 用于组件初始化工作,如:定义this.state的初始内容。constructor()接受两个参数:props,context,是指父组件传下来的的props,context。注意:如果想在constructor()内部使用props或context,需要将props、context传入super(),在组件其他地方可以直接使用。

  3. componentWillMount: 在组件挂载到DOM前调用,因此在这里调用this.setState不会引起组件重新渲染。

  4. componentDidMount: 在组件挂载到DOM后调用,在这里调用this.setState会触发组件再次渲染,并且在此时,dom节点已经生成,故而可以在此获取真实dom、进行ajax请求等。

注意: componentWillMount 和componentDidMount 只会执行一次,即组件第一次初始化时。

二、组件更新

组件更新涉及四个生命周期函数:componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate。下面按触发的先后顺序进行介绍。

  1. componentWillReceiveProps(nextProps): 在接收父组件改变后的props时触发。可以通过比较传入的nextProps与当前this.props,对组件进行操作。

  2. shouldComponentUpdate(nextProps, nextState): 唯一一个用于控制是否让组件重新渲染的生命周期函数。如果不想让组件重新渲染,return false即可。

  3. componentWillUpdate (nextProps,nextState): shouldComponentUpdate(nextProps, nextState)返回true之后,就会触发组件重新渲染,进入componentWillUpdate 函数。

  4. componentDidUpdate(prevProps,prevState): 组件只有在第一次更新完成后才会进入componentDidmount,之后都是进入componentDidUpdate。prevProps和prevState是更新前的props和state。同componentDidMount ,componentDidUpdate()执行时,dom也已经真正被添加到HTML中,故也可在此对dom进行操作。

补充说明:
  1. 造成组件更新的情况有两类:一类是props变化,另一类是state变化。

    第一类情况就是当父组件重新渲染的时候,props重传导致。此时,无论props是否发生变化,子组件都会重新渲染。此处,可通过上述componentWillReceiveProps(nextProps)进行优化。

    第二类情况就是组件本身调用this.setState()引起,无论state是否变化,都会重新渲染。但由于是自身引起,故不会触发componentWillReceiveProps方法。另外,此种情况同样可通过shouldComponentUpdate(nextStates)优化。

  2. 只有在componentWillMount、componentDidMount、componentWillReceiveProps与componentDidUpdate四个方法中才能调用this.setState(),且在componentWillMount中调用无意义。

三、组件卸载

组件卸载涉及两个生命周期函数:componentWillUnmount和componentDidMount。

  1. componentWillUnmount(): 在组件卸载前调用,一般执行一些清理工作,如:清除定时器(setTimeout,setInterval)、清除时间监听(removeEventListener)、清除手动创建的dom等。

  2. componentDidMount(): 组件卸载后执行的一些操作。

相关文章

  • React概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • React基础篇之组件的生命周期

    引出生命周期 react生命周期(旧) react生命周期(新) getSnapshotBeforeUpdate的...

  • React生命周期

    React v16.0前的生命周期 React v16.4+ 的生命周期图 React v16.9后这些生命周期钩...

  • React v16 生命周期

    React 16 生命周期 React 16.3 新增的生命周期方法 逐渐废弃的生命周期方法: 一般将生命周期分成...

  • 学习并实现react (4)

    实现生命周期 生命周期介绍 React 生命周期图 React 子组件在父组件下的生命周期流程 实现 compon...

  • React面试题 整理脑图

    react基础 React生命周期 react-router react进阶 react Hooks redux 其他

  • react/vue常见问题整理

    一、react 1. react生命周期 react 16生命周期相对于15的变化:componentWillMo...

  • React 组件生命周期

    组件生命周期 参考阅读: component-lifecycle react组件生命周期过程说明 react 组件...

  • 《深入React技术栈》学习笔记Ⅲ

    以下的生命周期都是在 React 15 的生命周期, React 16 的生命周期 API 已经发生变化。Reac...

  • React总结

    [toc] 1.React组件生命周期 1.1 生命周期图 组件的生命周期的图如下: 具体可参考React 组件生...

网友评论

    本文标题:React 生命周期

    本文链接:https://www.haomeiwen.com/subject/fxsixctx.html