[react] react15、react16生命周期对比

一、react15生命周期

react15生命周期
  1. 初始状态


    初始状态
  2. 点击“挂载Child Component”按钮后


    点击“挂载Child Component”后

    从右边的console中可以看出Child组件首次挂载的时候,依次触发了Child组件的constructor, componentWillMount, render, componentDidMount。

3.点击“修改Child组件的props.count”按钮后
shouldComponentUpdate返回true的情况下:


点击“修改Child组件的props.count”按钮后(shouldComponentUpdate返回true的情况下)

从右边的console中可以看出,当Child组件的props改变时,当shouldComponentUpdate返回true的情况下,依次调用了Child组件的componentWillReceiveProps, shouldComponentUpdate, componentWillUpdate, render, componentDidUpdate。

shouldComponentUpdate返回false的情况下:


点击“修改Child组件的props.count”按钮后(shouldComponentUpdate返回false的情况下)

从右边的console中可以看出,当Child组件的props改变时,当shouldComponentUpdate返回false的情况下,只调用了Child组件的componentWillReceiveProps, shouldComponentUpdate。
因此在某些情况下,可以使用shouldComponentUpdate来做优化,在本文中不细讲这块内容。

4.点击“修改Child组件的state.number”按钮后
shouldComponentUpdate返回true的情况下:


点击“修改Child组件的state.number”按钮后(shouldComponentUpdate返回true的情况下)

从右边的console中可以看出,当Child组件的state改变时,依次调用了Child组件的shouldComponentUpdate, componentWillUpdate, render, componentDidUpdate。

shouldComponentUpdate返回false的情况下:


点击“修改Child组件的state.number”按钮后(shouldComponentUpdate返回false的情况下)

从右边的console中可以看出,当Child组件的state改变时,当shouldComponentUpdate返回false的情况下,只调用了Child组件的shouldComponentUpdate。

跟修改props.count相比,少调用了componentWillReceiveProps。

二、react16生命周期

react16生命周期

1.初始状态


初始状态

2.点击“挂载Child Component”按钮后


点击“挂载Child Component”按钮后

从右边的console中可以看出Child组件首次挂载的时候,依次触发了Child组件的constructor, getDerivedStateFromProps, render, componentDidMount。

3.点击“修改Child组件的props.count”按钮后
shouldComponentUpdate返回true的情况下:


点击“修改Child组件的props.count”按钮后(shouldComponentUpdate返回true的情况下)

从右边的console中可以看出,当Child组件的props改变时,当shouldComponentUpdate返回true的情况下,依次调用了Child组件的getDerivedStateFromProps, shouldComponentUpdate, render, getSnapshotBeforeUpdate, componentDidUpdate。

shouldComponentUpdate返回false的情况下:


点击“修改Child组件的props.count”按钮后(shouldComponentUpdate返回false的情况下)

从右边的console中可以看出,当Child组件的props改变时,当shouldComponentUpdate返回false的情况下,只调用了Child组件的getDerivedStateFromProps, shouldComponentUpdate。

4.点击“修改Child组件的state.number”按钮后
shouldComponentUpdate返回true的情况下:


点击“修改Child组件的state.number”按钮后(shouldComponentUpdate返回true的情况下)

从右边的console中可以看出,当Child组件的state改变时,依次调用了Child组件的getDerivedStateFromProps, shouldComponentUpdate, render, getSnapshotBeforeUpdate, componentDidUpdate。

shouldComponentUpdate返回false的情况下:


点击“修改Child组件的state.number”按钮后(shouldComponentUpdate返回false的情况下)

从右边的console中可以看出,当Child组件的state改变时,依次调用了Child组件的getDerivedStateFromProps, shouldComponentUpdate。

与修改Child组件的props时相同。

5.点击“卸载Child Component”按钮后


点击“卸载Child Component”按钮后

从右边的console中可以看出,当Child组件卸载前会调用Child组件的componentWillUnmount。

参考文章:
React生命周期及事件详解
React v16.3 版本新生命周期函数浅析及升级方案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,508评论 1 33
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,040评论 0 1
  • 要讲React的生命周期的话,网上讲的已经很过了,不过大多数是讲react单个组件的生命周期,理论上组件本...
    周宇_6b69阅读 1,568评论 0 0
  • 生命周期流程图简单如下: 组件让你把用户界面分成独立的,可重复使用的部分,并且将每个部分分开考虑。React.Co...
    Simple_Learn阅读 1,094评论 0 0
  • 断食第二天2018-6-11 今天抄的王维的《春日上方即事》,这是摩诘居士在寺庙一些记录: 好读高僧传,时看辟谷...
    夫子富国阅读 470评论 0 0