React 初探(七)- 生命周期

概述

React 有一些生命周期钩子,可以让开发者在适当的时候插入自己的代码。那 React 生命周期中有哪些钩子函数呢?

demo

首先写一个简单的 demo

  1. create div


    create div
  2. mount div


    mount div
  3. update div


    update div
  4. destroy div


    destroy div

这四个状态便表示了一个 div 的整个生命周期,React 也不例外

React 生命周期

React 生命周期

上图便是创建一个组件的过程。React 生命周期 demo

何时 setState

  1. 不能在 mount 之前 setState,即不能在 constructorcomponentWillMountrendersetState
  2. 不能在 componentWillUpdatecomponentDidUpdatesetState,反复调用,栈溢出
  3. 可以在 componentDidMountcomponentWillUnmountcomponentWillReceivePropssetState

shouldComponentUpdate

shouldComponentUpdate(nextProps, nextState)

使用 shouldComponentUpdate 以让 React 知道当前状态或属性的改变是否不影响组件的输出。默认行为是在每一次状态的改变重新渲染,在大部分情况下你应该依赖于默认行为。

当接收到新属性或状态时,shouldComponentUpdate 在渲染前被调用。默认为 true。该方法并不会在初始化渲染或当使用 forceUpdate() 时被调用。

shouldComponentUpdate() 返回 false,而后 componentWillUpdaterender()componentDidUpdate 将不会被调用。

返回的参数 nextPropsnextState 是即将更新的数据,this.state 是旧的数据

shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能帮我们避免不必要的更新

shouldComponentUpdate demo

在生命周期中的哪一步应该发起 AJAX 请求

需要将 AJAX 请求放到 componentDidMount 函数中执行,主要原因如下:

  • constructor 函数中不能使用 setState

  • componentWillUnmount 中无法确保在执行 render 前已经获得了异步请求的数据,componentDIdMount 不存在这个问题

  • 为了性能的需要,FIber 有了调度 render 执行顺序的能力,所以 componentWillMount 函数的执行变得不确定了

  • 无法保证 AJAX 请求在组件的更新阶段里成功返回数据,有可能当我们进行 setState 处理的时候,组件已经被销毁了

setState 的时候会调用哪些生命周期函数

shouldComponentUpdate + componentWillUpdate + render + componentDidUpdate

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 12,707评论 1 33
  • 说在前面 关于 react 的总结过去半年就一直碎碎念着要搞起来,各(wo)种(tai)原(lan)因(le)。心...
    陈嘻嘻啊阅读 11,821评论 7 41
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 4,726评论 0 1
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 7,866评论 1 18
  • 生命周期流程图简单如下: 组件让你把用户界面分成独立的,可重复使用的部分,并且将每个部分分开考虑。React.Co...
    Simple_Learn阅读 4,766评论 0 0

友情链接更多精彩内容