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

2019-03-03  本文已影响0人  二季猫Hsu

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()。

上一篇 下一篇

猜你喜欢

热点阅读