react生命周期---参考学习20220726

2023-11-04

笔记:react生命周期

链接: react生命周期

借用图片
react生命周期的三个阶段:

  1. 组件挂载时;
  2. 组件更新时;
  3. 组件卸载时;

1.挂载时

挂载时调用四个生命周期函数

  1. constructor
  2. static getDerivedStateFromProps
  3. render
  4. componentDidMount

2.更新时

更新时调用五个生命周期函数

  1. static getDerivedStateFromProps
  2. shouldComponentUpdate 返回true或false (true会触发下一步,false不会触发render、getSnapshotBeforeUpdate、componentDidUpdate)
  3. render()
  4. getSnapshotBeforeUpdate(preProps,preState) 可返回null或实现返回snapshot
  5. react更新dom和refs
  6. componentDidUpdate(prevProps,prevState,snapShot) 根据getSnapshotBeforeUpdate的实现第三个参数snapshot或undefined

3.卸载时

卸载时调用一个生命周期函数 componentWillUmmount

4.各个生命周期详解

1.constructor

在React组件挂在之前,会调用它的构造函数。在为React.Component子类实现构造函数时,应在其他语句之前调用super(props)。否则,this.props在构造函数中可能出现未定义的bug。
作用:

  1. 给this.state赋值对象初始化内部状态
  2. 给事件处理函数绑定实例(this.fn=this.fn.bind(this))

2.getDerivedStateFromProps(从props获取派生状态)—不常用

static getDerivedStateFromProps
注:在调用render之前调用,并且在初始化挂载及后续更新时都会调用。它返回一个对象来更新state,如果返回null则不更新任何内容。
此方法适用于罕见的用例,即state的值在任何时候都取决于props;此方法无法访问组件实例!

3.shouldComponentsUpdate-----参数(nextProps,nextState)

作用:

  1. 此方法作为性能优化的方式存在
  2. 根据返回值判断组件是否受当前state和props更改的影响。默认行为,state每次发生改变都会重新渲染。
  3. shouldComponentUpdate()返回false:UNSAFE_componentWillUpdate(),render(),componentDidUpdate()则不会被调用

4.render函数

class 组件中唯一必须实现的方法
当render函数被调用时,会检查this.state和this.props的变化并返回以下类型之一:

  1. react元素(通常通过jsx创建)
  2. 数组或fragments(是render函数可以返回多个函数)–详见官方文档
  3. Portals,可以渲染子节点到不同的DOM子树中–详见官方文档
  4. 字符串或数值类型(会渲染成为文本节点)
  5. 布尔类型或 null(什么都不渲染,如:“test && 组件”)
  6. render应该是一个纯函数

注释:如果shouldComponentUpdate返回false,则不会调用render函数

5.getSnapshotBeforeUpdate(prevProps,prevState)----不常用

  1. 在最近一次渲染输出(提交到 DOM 节点)之前调用
  2. 它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)
  3. 此生命周期方法的任何返回值将作为参数传递给 componentDidUpdate()

6.componentDidMount(在组件挂载后立即调用)

  1. 依赖于 DOM 节点的初始化应该放在这里。
  2. 可在此处添加订阅,但需要在componentWillUmmount取消订阅
  3. 可以在此处直接调用setState,将会出发额外渲染,此渲染是发生在浏览器渲染屏幕之前

7.componentDidUpdate(更新后立即调用)

  1. 更新后会立即调用
  2. 注意需要加上条件语句,不然容易产生死循环
  3. 不要将props“镜像”给state
  4. 如果组件实现了getSnapshotForceUpdate(不常用),它的返回值将作为componentDidUpdate的第三个参数传递。否则snapshot将为undefined
  5. 注意:如果shouldComponentUpdate返回值为false,则不会调用componentDidUpdate

8.componentWillUmmount(组件卸载及销毁之前被调用)

  1. 可用来清除订阅
  2. 不要使用setState,组件卸载将永不挂载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react生命周期---参考学习20220726 的相关文章

随机推荐

  • 多文件编辑作业(2023.1.10)

    第一题 main c include head h int main int argc const char argv char str hello my student int start 0 int end strlen str 1 M
  • 提供一个用于计算两个point之间的距离方法_汇总

    作者 Tom Hardy Date 2020 02 18 来源 汇总 基于3D点云的深度学习方法 前言 三维数据通常可以用不同的格式表示 包括深度图像 点云 网格和体积网格 点云表示作为一种常用的表示格式 在三维空间中保留了原始的几何信息
  • 已解决报错UnboundLocalError: local variable ‘title‘ referenced before assignment

    1 今天抓取某网站的数据时 显示报错UnboundLocalError local variable title referenced before assignment Traceback most recent call last Fi
  • 无法启动64位idea,无法启动idea64.exe的一种原因(意外删除破解文件导致无法打开idea)

    前言 突然有一天 我的IDEA出现了问题 点击桌面快捷方式的idea毫无反应 无奈之下重装了IDEA 但还是有相同的问题 无法打开64位的idea 网上找了一堆博客 花了两个多小时终于解决了 写篇博客记录下这个问题 1 首先打开idea b
  • 初识网络安全(黑客技术)

    目录 前言 一 安全事件案例 二 网络安全行业公司 三 网络安全岗位 四 网络安全网站 五 src漏洞平台 总结 前言 网络安全是指保护计算机网络和网络上的数据免受未经授权的访问 使用 泄露 破坏和干扰的一系列措施和技术 在当今数字化时代
  • JAVA web 获取系统时间

  • ROS---保存地图

    建立save map sh文件夹 bin bash rosrun map server map saver f catkin ws src hypharos minicar launch map mymap 保存地图时我们进入此文件所在文件
  • 从零实现一套属于自己的UI框架-发布到npm

    汤小梦 https juejin im post 5e200ee86fb9a02fdd38986d 不知不觉马上就要放假了 写一篇文章祝愿 2020 越来越好 如今前端工程师的要求越来越高了 需要掌握的技术点越来越多了 会一些基本的前端技能
  • 华为云 CentOS 8 下 Nginx 1.20 & PHP 8.2 安装

    Nginx 1 20 版本安装 使用 dnf module 选择 nginx 版本 如果不选择 默认安装 1 14 版 1 先 RESET 一下 xxx ecs 209716 sudo dnf module reset nginx Repo
  • 子网划分,子网掩码

    1 IP地址分类 有类编址 所谓的同一网段就是 网络位一模一样 才叫在同一网段 否则不是在同一网段 网络位 主机位 固定电话的区号 025 主机你的电话号码 85562264 同一区号 之间 漫游费 南京 徐州 苏州 漫游 借助路由器转发我
  • Qt多线程中的moveToThread()的简单用法

    之前在项目中用到了Qt的多线程 因为以前用的一直是用一个类直接继承QThread 然后再重写run 方法 需要注意的是 QThread只有run函数是在新线程里的 其他所有函数都在QThread生成的线程里 后来查阅了一些资料才知道 Qt有
  • 00_Ubuntu系统入门

    目录 前言 一 Ubuntu系统安装 1 1 VMware15安装虚拟机不兼容 无法打开 1 2 Ubuntu联网问题 二 Ubuntu系统入门 2 1 Ubuntu系统初体验 2 2 Ubuntu终端操作 2 3 shell操作 2 3
  • 关于汇编语言寄存器和指令操作的整理

    最近汇编学到后面的内容 越来越觉得前面的基础没有掌握好 弄得最后编写汇编程序的时候 寄存器瞎用 没有一点的规矩 中断操作也不知道是对哪个寄存器里的数进行操作 每次做一个小程序 都得翻书后面的INT中断查询表 感觉很不爽 今天花了大半天把几本
  • 数据通信——因特网基础

    引言 之前最开始并接触学习的是华为的路由器交换机等知识 后来慢慢的扩充到了计算机网络 现在在备考计网专业课 因此写一下我对计网现阶段知识的认知 也是对考研备考时的一个复习 我将用易于理解的逻辑阐述下计网中难以理解的知识 希望大家也多多补充并
  • Visual C++ 运行窗口一闪而过的解决方法

    本文简单介绍了Visual C 编写运行程序的步骤 解决Visual C 2010开发环境中运行程序时运行窗口一闪而过的问题 总结了 断点调试 F5 方法 开始执行 Ctrl F5 方法 调试工具条方法 暂停语句或者输入等待方法 共4种方法
  • jvisualvm远程监控centos上虚拟机的状态

    要使用jvisualvm监视远程主机需要先再远程主机上运行jstatd 1 在 JAVA HOME bin目录下新建jstatd all policy文件 内容如下 grant codebase file java home lib too
  • 符号优先级误区一:移位运算符优先级比加减运算符低

    目录 移位运算符优先级比加减运算符低 误区 发现问题 实际结果 举例子证实 代码如下 实际结果 移位运算符优先级比加减运算符低 这是我在做二分查找时发现的问题 误区 发现问题 直接除2 int mid start end start 2 移
  • message from server: “Host is not allowed to connect to this MySQL server“问题的解决办法

    数据库安装完成后 默认是不能远程登陆的 只能在本地用localhost 或者127 0 0 1登录访问 如果需要远程登录 则需要修改mysql设置 具体修改方式 1 本地登录mysql root localhost mysql u root
  • Java的网络编程

    网络编程是指编写运行在多个设备 计算机 的程序 这些设备都通过网络连接起来 java net 包中 J2SE 的 API 包含有类和接口 它们提供低层次的通信细节 你可以直接使用这些类和接口 来专注于解决问题 而不用关注通信细节 java
  • react生命周期---参考学习20220726

    react生命周期笔记 笔记 react生命周期 链接 react生命周期 https projects wojtekmaj pl react lifecycle methods diagram 1 挂载时 挂载时调用四个生命周期函数 2