React 知识点小结(二):生命周期

React是单向数据流

组件初始化(initialization)阶段:

constructor // 构造器 设置组件的初始化状态

组件的挂载(Mounting)阶段

componentWillMount // 即将载入dom
组件即将被渲染到页面之前触发,此时可以进行开启定时器、向服务器发送请求等操作

render
组件渲染

componentDidMount // 已经载入dom 重要!!!!
组件已经被渲染到页面中后触发:此时页面中有了真正的DOM的元素,可以进行DOM相关的操作

组件的更新(update)阶段:

componentWillReceiveProps // 即将接受参数
组件接收到属性时触发

shouldComponentUpdate // 判断是否允许组件更新 true允许组件更新,false阻止组件更新
当组件接收到新属性,或者组件的状态发生改变时触发。组件首次渲染时并不会触发
一般我们通过该函数来优化性能

componentWillUpdate // 即将更新
组件即将被更新时触发

render
组件渲染

componentDidUpdate // 已经更新
组件被更新完成后触发。页面中产生了新的DOM的元素,可以进行DOM操作

销毁阶段:

componentWillUnmount // 即将被销毁
组件被销毁时触发。这里我们可以进行一些清理操作,例如清理定时器,取消Redux的订阅事件 和 清除componentDidMount中手动创建的DOM元素等等。


React v16.4 的生命周期

React V16中 推出了Fiber,如果开启 异步render,那么 React Fliber 将在两个阶段:
第一个阶段Reconciliation Phase和第二阶段Commit Phase.

在第一阶段Reconciliation Phase,React Fiber会找出需要更新哪些DOM,这个阶段是可以被打断的;但是到了第二阶段Commit Phase,那就一鼓作气把DOM更新完,绝不会被打断。

与此相关的,就牵扯到了 生命周期函数。所以在render前,可能会多次调用生命周期函数。具体如下:

第一阶段可能会调用下面这些生命周期函数,说是“可能会调用”是因为不同生命周期调用的函数不同。

componentWillMount
componentWillReceiveProps
shouldComponentUpdate
componentWillUpdate

下面这些生命周期函数则会在第二阶段调用。

componentDidMount
componentDidUpdate
componentWillUnmount


React Fiber与生命周期函数

新的生命周期

getDerivedStateFromPropsgetSnapshotBeforeUpdate

getDerivedStateFromProps

static getDerivedStateFromProps(props, state) 在组件创建时和更新时的render方法之前调用,它应该返回一个对象来更新状态,或者返回null来不更新任何内容。

getSnapshotBeforeUpdate

getSnapshotBeforeUpdate() 被调用于render之后,可以读取但无法使用DOM的时候。它使您的组件可以在可能更改之前从DOM捕获一些信息(例如滚动位置)。此生命周期返回的任何值都将作为参数传递给componentDidUpdate()。

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

推荐阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,529评论 1 33
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,860评论 1 18
  • 3. 组件生命周期 React严格定义了组件的生命周期,生命周期可能会经历如下三个过程: 装载过程(Mount):...
    怀念不能阅读 643评论 1 3
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,059评论 0 1
  • 『赠我二大爷』 前几天上了古诗三首,第二首是《赠刘景文》。第二天课间,堂正神秘兮兮的跑过来:...
    大书小香阅读 440评论 0 8