React --生命起源(新生命周期)

【react全家桶学习】react的 (新/旧) 生命周期(重点) 相对比vue的生命周期,react显得复杂的多,光从名称上就比vue长,所以做好准备,不要放弃,坚持就是胜利、 阅读详情

生命周期分解图

在这里插入图片描述
在这里插入图片描述

一、新增生命周期

1.1 static getDerivedStateFromProps(nextProps, state)

  该生命周期任何时候, state 的值都取决于 props ( Derived 意思为衍生的,英语好的同学看到名字就能知道这个生命周期的用法了吧)

static getDerivedStateFromProps(nextProps, state) {
	return null;
}

  此生命周期执行的时机在第一次初始化后,父组件重新渲染后,或者调用 setState() / forceUpdate() 后。该方法属于静态方法,无权访问 class 内部,也就是拿不到 this ,但是该回调函数的 return 返回值,将作为 state 与 组件内部 state 进行合并,若返回 null 则不更新 state 。

  注意:

  1. react@16.3 版本下 setState() 和 forceUpdate() 并不会进入该钩子函数。

  2.这是一个非常规的生命周期,因为会派生新的state,导致数据来源多样,难以维护,应该考虑使用受控组件或者完全非受控组件来代替。

1.2 getSnapshotBeforeUpdate(prevProps, prevState)

  同理,英语好的同学看到标题应该就能明白用法了, Snapshot 意思为快照。具体用发需要配合 componentDidUpdate 一块使用。

getSnapshotBeforeUpdate() {
	return 1;
}
componentDidUpdate(prevProps, prevState, snapshot) {

}

  在真实 dom 和 ref 确认更新前进入该钩子函数,能在发生更改前从之前的 DOM 中获取一些信息,类似于上一次的 Dom 快照,返回值将作为参数传递给 componentDidUpdate , 常用于获取滚动位置等。

二、修改

   componentDidUpdate(prevProps, prevState, snapshot )

  新增第三个参数接收来自 getSnapshotBeforeUpdate 的返回值。

三、计划删除/即将过时

   componentWillMount / componentWillUpdate / componentWillReceiveProps

  UNSAFE_componentWillMount

  UNSAFE_componentWillUpdate

  UNSAFE_componentWillReceiveProps

废弃原因

  同步渲染过渡到异步渲染( React Fiber )

  到目前为止, React 的渲染更新过程都是同步的,每一次加载或者更新树组件,都会做很多事,比如调用各个组件的生命周期,计算对于 Virtual Dom 最后更新 DOM 树,然而过多的操作,更深的层级容易导致这系列的执行时间过长,浏览器的主线程长期被占用,从而出现卡顿或者假死的现象。同步渲染过程如下:

  1. 首次渲染: willMount > render > didMount ,
  2. props 更新时: receiveProps > shouldUpdate > willUpdate > render > didUpdate
  3. state 更新时: shouldUpdate > willUpdate > render > didUpdate
  4. 卸载时: willUnmount

  为了解决同步操作时间过长的方法, React 计划在 17 版本启用最新的核心算法: React Fiber 从而实现异步渲染——大致原理是将一次更新过程变成多个分片完成,主要就是分为 Reconciliation Phase (协调:找出需要变动的节点)和 Commit Phase (提交更新)。

协调阶段

   React 会霸占着浏览器资源,导致用户触发的时间得不到响应以及掉帧,因此 Fiber 将协调阶段按照优先级分段执行,任何低优先级的更新都可能被打断重来。

  计划删除/即将过时的生命周期就发生在 render 前的协调阶段,因此随时可能会被打断重新执行,这些钩子函数就会变得不可预测。

四、旧生命周期替换方案

4.1 componentWillMount

  a:初始化 state :转移至 constructor 的 this.state 内。

  b:不建议在该生命周期内有副作用操作,如若有也可以转移至 componentDidMount 。

4.2 componentWillReceiveProps

  a:副作用操作(比如数据请求/动画):转移至 componentDidUpdate 。

  b:考虑受控组件和完全非受控组件。

  c:实在不行也可以使用 getDerivedStateFromProps,但务必做好条件判断。

componentWillReceiveProps
// before
componentWillReceiveProps(nextProps) {	
  if (nextProps.translateX !== this.props.translateX) {
    this.setState({	
      translateX: nextProps.translateX,	
    });	
  }	
}

// after
static getDerivedStateFromProps(nextProps, prevState) {
  if (nextProps.translateX !== prevState.translateX) {
    return {
      translateX: nextProps.translateX,
    };
  }
  return null;
}

   getDerivedStateFromProps 中禁止了组件去访问 this.props ,强制开发者去比较 nextProps 与 prevState 中的值,以确保当开发者用到 getDerivedStateFromProps 这个生命周期函数时,就是在根据当前的 props 来更新组件的 state ,而不是去做其他一些让组件自身状态变得更加不可预测的事情。

   React 团队试图通过框架级别的 API 来约束或者说帮助开发者写出可维护性更佳的 JavaScript 代码。

// before
componentWillReceiveProps(nextProps) {
  if (nextProps.isLogin !== this.props.isLogin) {
    this.setState({	
      isLogin: nextProps.isLogin,	
    });
  }
  if (nextProps.isLogin) {
    this.handleClose();
  }
}
// after
static getDerivedStateFromProps(nextProps, prevState) {
  if (nextProps.isLogin !== prevState.isLogin) {
    return {
      isLogin: nextProps.isLogin,
    };
  }
  return null;
}

componentDidUpdate(prevProps, prevState) {
  if (!prevState.isLogin && this.props.isLogin) {
    this.handleClose();
  }
}

4.3 componentWillUpdate

  通常可以替换成 componentDidUpdate() getSnapshotBeforeUpdate()

componentWillUpdate
class ScrollingList extends React.Component {
  listRef = null;

  getSnapshotBeforeUpdate(prevProps, prevState) {
    // Are we adding new items to the list?
    // Capture the scroll position so we can adjust scroll later.
    if (prevProps.list.length < this.props.list.length) {
      return (
        this.listRef.scrollHeight - this.listRef.scrollTop
      );
    }
    return null;
  }

  componentDidUpdate(prevProps, prevState, snapshot) {
    // If we have a snapshot value, we've just added new items.
    // Adjust scroll so these new items don't push the old ones out of view.
    // (snapshot here is the value returned from getSnapshotBeforeUpdate)
    if (snapshot !== null) {
      this.listRef.scrollTop =
        this.listRef.scrollHeight - snapshot;
    }
  }

  render() {
    return (
      <div ref={this.setListRef}>
        {/* ...contents... */}
      </div>
    );
  }

  setListRef = ref => {
    this.listRef = ref;
  };




react-解释ReactHooks组件的新生命周期的流程图 解释React Hooks组件的新生命周期的流程图 立即下载

相关推荐

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

react生命周期(新)

react新旧生命周期区别 ①旧生命周期删除三个钩子:componentWillMount、componentWillUpdate、componentWillReceiveProps这三个钩子在17.版本使用时要加上前缀UNSAFE_,即UNSAFE_componentWillMoun否则会有警告甚至报错。增加使用成本,减少程序员使用。这是因为这些生命周期方法经常被误解和滥用,UNSAFE_不是指不安全,而是在未来版本中(maybe 18.)可能出现bug,特别是异步渲染中。实际很少使用这三个钩子,基本.

weixin_43613849的博客 1947

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

React生命周期(新-旧)

① 是什么?组件从创建到挂载页面上运行,再到组件不用时卸载的过程,叫生命周期,只有类组件才有生命周期。②作用学习组件的生命周期,有助于理解组件的运行方式,完成更复杂的组件更能、分析组件错误原因等。① 是什么?生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数。②作用为开发人员在不同阶段操作组件提供了时机。

比鲁斯大人的博客 797

Rapid SCADA MQTT

一、配置RapidSCADA 1、准备KpMqtt.dll、Jint.dll库文件,从网盘下载。 2、将以上两个文件拷贝到SCADA安装目录的Comm/KP目录下,如下: C:\SCADA\ScadaComm\KP 3、新建SCADA项目 4、新建Line 5、新建Device 6、拷贝Config目录下的KpMqtt_001.xml文件、KpMqtt_Job.js文件到项目Comm\Config下,如下示例链接 C:\SCADA\Projects\MQTTProject\Instances\Defau

mumanquan1的博客 3007

如何解除Uniaccess管控??

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2380

react学习(九) React 新的生命周期

我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安全的。 React16 废弃的生命周期有 3 个 will: componentWillMount componentWillReceiveProps componentWillUpdate 废弃的原因,是在 React16 的 Fiber 架构中,可以中间进行暂停重启操作,调和过程会多次执行 will 周期,不再是一次执行,失去了原有的意

weixin_41364787的博客 1227

Codex 100个真实案例 - 用AI生成建筑平面图SVG(室内设计师的新武器)

本案例用 Codex 生成一套完整的 Python 脚本,自动绘制 SVG 格式的建筑平面图。我们会设计一个90平两室一厅的户型——客厅、主卧、次卧、厨房、卫生间一应俱全,还会自动摆放家具(沙发、床、餐桌、橱柜)、标注尺寸和面积、绘制水电路走向、生成多种配色方案。最终输出的 SVG 文件可以直接用浏览器打开展示,也可以转成 PNG 交给客户。室内设计师看了都说好!

yueyeguzhuo的专栏 758

React体系06-React 组件的新旧生命周期

生命周期含义:从组件出生到更新、改变、销毁(创建\更新\销毁)的整个阶段。生命周期的钩子函数含义:组件的每个阶段都伴随着一些方法,就是生命周期的钩子函数,我们就是通过控制这些生命周期函数从而控制组件。生命周期意义:组件的生命周期有助于理解组件的运行方式、完成更复杂的组件功能、分析组件错误原因TIPS只有类组件才有生命周期。

2402_85402030的博客 1112

Qualcomm AI Engine Direct SDK(QNN)的使用介绍

Qualcomm AI Engine Direct SDK,高通新的AI模型推理框架,又名QNN,为AI开发提供统一API的底层框架。通过这个SDK,可以在高通的 CPU/GPU和HTP上对AI模型进行性能加速。2.Qualcomm AI Engine Direct SDK的公开英文文档。1.Qualcomm AI Engine Direct SDK的下载和安装。

u013250861的博客 6971

我用 GPT-5.5 十分钟搞定一篇文献综述!附全流程指南

每一个框架中提出的逻辑链接,都必须至少有一篇提供文本中的文献作为支撑、严格禁止虚构变量、逻辑关系或研究结果、如果某些变量或关系在文本中未提及,必须明确声明“在提供的文本中未找到相关信息”、引用格式必须严格遵循原文提供的“作者/年份”格式,例如:[Smith, 2022]。各位同仁好,我是七哥。扫描提供的文献摘要,识别存在冲突的结果或理论、分析这些文献之间的差异,并总结可能导致差异的原因、输出一个结构化的学术争论段落,清楚呈现文献间的分歧和潜在影响因素、对于缺失或不明确的信息,按约束条件如实标注。

智能AI让学术科研更容易 369

React入门到实战(自学版)

React17自学笔记,定期更新

weixin_50011679的博客 4832

NPC 三电平逆变器中点电位平衡算法详解

最常用:零序电压注入(简单、计算量小)最可靠:虚拟空间矢量调制(VSVPWM)及其改进形式(全范围平衡)趋势:结合模型预测控制(MPC)或智能算法(模糊、神经网络)进一步提升动态性能和鲁棒性。NPC 三电平逆变器中点电位平衡算法的 C# 实现示例(零序电压注入法 + 闭环补偿)在 NPC(Neutral Point Clamped)三电平逆变器中,中点电位平衡最常用且易于软件实现的方案是零序电压注入法。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 323

react 18 基础入门到项目实战总结

此系列笔记的来缘起 此系列笔记,是我学习《千锋react零基础入门到项目实战》的学习笔记,其中也加入了部分自己的理解。 通过此系列笔记,你能得到什么? •你可以完整的了解react的基础知识。 •通过实际需求案例驱动知识点吸收,通过幽默风趣讲解驱动学习的积极性,帮助大家成长为React开发高手打下基础。 下面,仅列出这套课程的知识点,点击查看详情,即可查看详细内容。

BradenHan的专栏 1782

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《六》类组件的生命周期

组件从创建到销毁的过程,被称为组件的生命周期。在没有 Hooks 之前,函数组件没有生命周期,因为生命周期函数是类的方法实现的,函数组件没有继承,所以也就没有生命周期。在生命周期的各个阶段都有相对应的钩子函数,会在特定的时机被调用,被称为组件的生命周期函数。生命周期函数 = 生命周期钩子 = 生命周期回调函数 = 生命周期钩子函数。

花铛 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【React】React 生命周期完全指南

React 组件的生命周期是指组件从创建、更新到销毁的整个过程。合理地使用生命周期方法可以让我们更好地控制组件的行为,优化性能,并处理副作用。React 生命周期方法为我们提供了在组件不同阶段执行代码的机会。优化组件性能正确处理副作用管理组件状态避免内存泄漏constructor:初始化componentDidMount:副作用处理componentDidUpdate:更新后的操作componentWillUnmount:清理工作。

鑫宝的博客 7652

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

❤React-组件的新旧生命周期

❤React-组件的新旧生命周期 1、组件的生命周期概述. ????生命周期含义: 从组件出生到更新、改变、销毁(创建\更新\销毁)的整个阶段。 ????生命周期的钩子函数含义: 组件的每个阶段都伴随着一些方法,就是生命周期的钩子函数,我们就是通过控制这些生命周期函数从而控制组件。 ????生命周期意义: 组件的生命周期有助于理解组件的运行...

weixin_43932886的博客 900

React的生命周期总结

React组件的生命周期可以概述为几个关键阶段:挂载(Mounting)、更新(Updating)、卸载(Unmounting),以及错误处理。随着React的发展,特别是引入Hooks之后,经典类组件的生命周期方法逐渐被函数组件中的Effect Hooks和新的生命周期方法所替代。

ivan5277的博客 942

一文带你看懂React生命周期和性能优化

在老版本的 React 中,如果组件自身的某个 state 跟其 props 密切相关的话,一直都没有一种很优雅的处理方式去更新 state,而是需要在 componentWilReceiveProps 中判断前后两个 props 是否相同,如果不同再将新的 props更新到相应的 state 上去。但是,有的时候子组件的接受父组件的数据没有变动。需要注意,在进行新旧对比的时候,是**浅对比,**也就是说如果比较的数据时引用数据类型,只要数据的引用的地址没变,即使内容变了,也会被判定为true。

小庄zzz的博客 3586

【react】React 生命周期学习笔记(详细代码 + 不同版本对比 + Vue 对比 + 实际业务场景)

react生命周期学习教程,涵盖所有知识点与项目实际应用

silverclayz的技术分享 1292

react生命周期详细介绍

react生命周期详解,挂载渲染,卸载和错误捕获

luobo2345的博客 2万+

React 生命周期详解(新)

React 16之后有三个生命周期被废弃: componentWillMount componentWillReceiveProps componentWillUpdate 因为这些生命周期方法容易被误解和滥用。 React 16.8+的生命周期分为三个阶段,分别是挂载阶段、更新阶段、卸载阶段。 挂载阶段 constructor: 构造函数,最先被执行,我们通常在构造函数里初始化state对象或者给自定义方法绑定this getDerivedStateFromProps: static getDeri

z止于至善的博客 3万+

ReactV16.3,即将更改的生命周期

注释:本文是根据React的官方博客翻译而成(文章地址:https://reactjs.org/blog/2018...)。主要讲述了React之后的更新方向,以及对之前生命周期所出现的问题的总结,之后的React将逐步弃用一些生命周期和增加一些更实用更符合实际情况的生命周期。其中也为从传统的生命周期迁移到新版本的React提出了一些解决...

weixin_33892359的博客 247

react生命周期

组件的生命周期可分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM 生命周期的方法有: componentWillMount  在渲染前调用,在客户端也在服务端。一般用的比较少,更多的是用在服务端渲染 1、组件刚经历constructor,初始完数据 2、组件还未进入render,组件还未渲染完成,dom...

小白要进阶的博客 7084

React新生命周期

react官方打算在未来提出一种实现异步渲染的方法以提高性能,主要的特点就是在渲染完成之前可以被中断,中断之后不会继续执行生命周期,而是重头开始执行生命周期。 所以官方决定,从v17开始删除以下三个生命周期钩子: componentWillMount componentWillReceiveProps componentWillUpdate 作为补偿,新增两个新的生命周期钩子 sta...

paper_crane的博客 3907

关于React v16.3 新生命周期

变更的部分 react v16.3终于出来了,最大的变动莫过于生命周期去掉了以下三个 componentWillMount componentWillReceiveProps componentWillUpdate 同时为了弥补失去上面三个周期的不足又加了两个 static getDerivedStateFromProps getSnapshotBeforeUpdate 当然,这个更替是缓...

weixin_34195546的博客 310
上一篇: 企业级 Redux 应该怎么用--部署篇
下一篇: 前端压缩--Base64图片压缩原理
不见浅诗~
博客等级 码龄7年 506粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值