react新旧生命周期钩子

news2024/11/22 14:30:07

以下的内容根据尚硅谷整理。

旧生命钩子

在这里插入图片描述
辅助理解:

  • 红色框:挂载时生命钩子
  • 蓝色框:更新时生命钩子
  • 绿色框:卸载时生命钩子

挂载时

如图所示,我们可以看到,在组件第一次挂载时会经历:
构造器(constructor)=》组件将要挂载(componentWillMount)=》组件挂载渲染(render)=》组件挂载完成(componentDidMount)。

更新时

有三条路径可以被触发,分别是红色、橙色和粉色。
在这里插入图片描述
组件内部状态更新:
路径2:组件是否应该更新(shouldComponentUpdate)=》组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成(componentDidUpdate)。

  • shouldComponentUpdate,未显性声明时默认返回ture,返回false时组件无法进行更新操作。也就无法执行××××××××》组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成。
shouldComponentUpdate(){
  return false;
}

强制更新:
路径3:我们可以调用this.forceUpdate()实现强制更新,这个api和setState一样都是React自带的,一般这个强制更新很少用。
组件将要更新(componentWillUpdate)=》组件更新渲染(render)=》组件更新完成(componentDidUpdate)。

父组件重新render:
路径1:在父组件执行完render()之后会被触发。还记得吗?我们蓝色的区域是更新的生命钩子,也就是说第一次render()的时候不算,第二次及之后才会被触发。(componentWillReceiveProps)

import React, { Component } from 'react'

export default class A extends Component {
  state={
    car:'奥迪'
  }
  changeCar= () => {
    this.setState({
      car:'奔驰'
    })
  }
  render() {
    return (
      <div>
        <div>我是组件A</div>
        <button onClick={this.changeCar}>换车</button>
        <B car={this.state.car}/>
      </div>
    )
  }
}

class B extends Component {
  //首次渲染不会被触发
  componentWillReceiveProps(){
    console.log('componentWillReceiveProps')
  }
  render() {
    return (
      <div>
        我是组件B,我接收到的车是:{this.props.car}
      </div>
    )
  }
}

旧生命钩子的总结

在这里插入图片描述

新生命钩子

当你充分理解旧的生命钩子之后,看下面这张图对你来说应该易如反掌。大体来说用来划分的区块方式一致,即:创建时、更新时【三条路径】、卸载时。
在这里插入图片描述

getDerivedSateFromProps

直译:从props哪里获得的派生的State

1.
state ={name:'佛系努力中……'}
//注意点1:需声明为类的静态方法《static》
static getDerivedStateFormProps(props,state){
  //可以读取到props,state
  //注意点2:必须return一个state对象或者null
  return {name:'哈哈哈'} 
  //或者null
}
最后,this.state.name将会被渲染成‘哈哈哈’,直接更改了state的值,且任何操作不会改变该值。
2.
state ={name:'佛系努力中……'}
static getDerivedStateFormProps(props,state){
  return null
}
如果return null 功能将不会受到影响
3.此方法使用于state的值在任何时候取决于porps
state ={name:'佛系努力中……'}
static getDerivedStateFormProps((props,state){
  return props
}

总结:这个生命周期钩子会被用到情况很少,并且建议尽量避免使用,防止导致代码冗余,并使组件难以维护。

getSnapshotBeforeUpdate

//在更新之前获得一个快照
getSnapshotBeforeUpdate(prevProps,prevState){
    console.log("getSnapshotBeforeUpdate--",prevProps,prevState)
    return '一只小猫'
}

componentDidUpdate

//组件以及更新完毕,接收三个值,最后一个snapShot,即为getSnapshotBeforeUpdate返回值
componentDidUpdate(prevProps,prevState,snapShot){
    console.log("componentDidUpdate--",prevProps,prevState,snapShot)
 }

一个应用场景
总结:这个东西实际应用场景也很少,嘿嘿!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能优化算法应用:基于堆优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于堆优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于堆优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.堆优化算法4.实验参数设定5.算法结果6.参考文献7.…

ABCDE类网络的划分及保留网段

根据IP地址的分类&#xff0c;IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述&#xff1a; A类网络&#xff1a;范围从1.0.0.0到127.0.0.0&#xff0c;网络地址的最高位必须是“0”&#xff0c;可用的A类网络有127个&#xff0c;每个网络能容…

16、XSS——会话管理

文章目录 一、web会话管理概述1.1 会话管理1.2 为什么需要会话管理&#xff1f;1.3 常见的web应用会话管理的方式 二、会话管理方式2.1 基于server端的session的管理方式2.2 cookie-based的管理方式2.3 token-based的管理方式 三、安全问题 一、web会话管理概述 1.1 会话管理 …

【python】包(package)与模块(module)、import、__name__与__main__

导入模块一般写在程序最前面&#xff0c;且顺序为&#xff1a;内置模块、第三方模块、自定义模块 一、模块&#xff08;module&#xff09;与包&#xff08;package&#xff09; 模块&#xff08;module&#xff09;可以理解为是一个.py文件&#xff0c;import 模块 相当于执行…

java--接口的其他细节

1.jdk8开始&#xff0c;接口新增了三种形式的方法 ①默认方法(实例方法)&#xff1a;使用用default修饰&#xff0c;默认会被加上public修饰。注意&#xff1a;只能使用接口的实现类对象调用 ②私有方法&#xff1a;必须用private修饰(jdk9开始才支持) ③类方法(静态方法)&a…

EG网关串口连接施耐德M340PLC应用案例

EG网关串口连接施耐德M340PLC应用案例 前言&#xff1a;施耐德M340 PLC广泛应于工业控制领域&#xff0c;是一款性能高&#xff0c;运行稳定的控制器。此次我们要把施耐德M340 PLC通过Modbus-RTU协议使用EG网关连接到EMCP物联网云平台&#xff08;简称EMCP&#xff09;&#x…

制作古风纹理的滕王阁3D模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 滕王阁&#xff0c;位于江西省南昌市东湖区沿江路&#xff0c;地处赣…

香港优才计划申请获批后,才发现原来香港年薪100w并不难!

香港优才计划申请获批后&#xff0c;才发现原来香港年薪100w并不难&#xff01; 在香港工作的话&#xff0c;给我个人的感觉就是工作和生活是分开的&#xff0c;无论是同事还是上司。比如员工在休假的时候从来不会突然来个电话让你忙个工作或者加个班&#xff0c;也不会八卦你的…

Linux下搭建私有的MQTT服务器实现多设备间实时图传

一、前言 在Linux(ubuntu 18.04)系统下使用EMQX搭建自己私有的MQTT服务器,实现多设备间实时图传效果。 测试了两种场景: 【1】图像采集端:采集电脑自己的摄像,通过MQTT协议上传到MQTT服务器,图像显示端订阅采集端的主题,获取实时图像显示。 【2】设备端:ESP32 + OV26…

java每日一记 —— 常见的Bean后置处理器

此代码在jdk11上测试通过&#xff0c;SpringBoot版本为2.7.14 1.上代码 1.测试方法 public class Dome04Application {public static void main(String[] args) {// 这是一个干净的容器GenericApplicationContext context new GenericApplicationContext();// 添加3哥Beanc…

LeetCode-470. 用 Rand7() 实现 Rand10()【数学 拒绝采样 概率与统计 随机化】

LeetCode-470. 用 Rand7 实现 Rand10【数学 拒绝采样 概率与统计 随机化】 题目描述&#xff1a;解题思路一&#xff1a;首先说一个结论就是(rand_X() - 1) Y rand_Y() > [1,X*Y]&#xff0c;即可以等概率的生成[1, X * Y]范围的随机数&#xff0c;其实就像军训的时候报数…

DG领域常见算法:Domain Alignment

本文主要参考&#xff1a;Domain Generalization: A Survey Problem Definition 在DG的setting中&#xff0c;我们通常能拿到 K ( K ≥ 1 ) K(K\ge 1) K(K≥1)个source domain的数据&#xff0c;这几个source domain相似但并不相同&#xff0c;记为 S { S k { ( x ( k ) , …

Vue 实现基于 LogicFlow 自定义节点美化工作流

话不多说&#xff0c;先看效果&#xff1a; 动态效果&#xff1a; 完整设计界面&#xff1a; 右键菜单&#xff1a; 未完待续…

Java零基础——秒杀篇

1.【秒杀】 1.1. 技术选择型 Springboot Redis Rocketmq Mysql MybatisPlus 1.2. 架构图 1.3. 准备工作-数据库 SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS 0;-- ------------------------------ Table structure for goods-- ----------------------------DROP…

【labview报错,缺少GOOP Development Suite】

操作 当labview报此错误时&#xff0c;第一类情况为缺少包&#xff0c;第二类为所使用的GPU包已失效 以下为第一类缺包的解决方式 登录VIPM&#xff0c;如何安装VIPM查看此贴&#xff1a;VIPM安装 打开VIPM后&#xff0c;右上角输入goop,双击搜索出的安装包 勾选需要安装的包…

Java_ArrayList顺序表详解

目录 前言 顺序表 ​编辑 顺序表和数组 ArrayList简介 说明 ArrayList使用​编辑 ArrayList常见操作 ArrayList实现二维数组 ArrayList的遍历 ArrayList的扩容机制 总结 前言 一个高端的程序员,往往都是数据结构学的很好,判断一个程序的优劣也是看数据结构学的好与坏.…

Mysql-全外连接-Union和Union ALL的辨析及练习

mysql不支持FULL JOIN&#xff0c;但是可以用 &#xff08;select 语句1&#xff09; union &#xff08;select 语句2&#xff09;代替 &#x1f436;1. SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意&#xff0c;UNION 内部的 SELECT 语句…

使用git出现的问题

保证 首先保证自己的git已经下载 其次保证自己的gitee账号已经安装并且已经生成ssh公钥 保证自己要push的代码在要上传的文件夹内并且配置文件等都在父文件夹&#xff08;也就是文件没有套着文件&#xff09; 问题 1 $ git push origin master gitgitee.com: Permission de…

Vue混淆与还原

Vue混淆与还原 引言 Vue是一种流行的JavaScript框架&#xff0c;用于构建用户界面。它简单易用且功能强大&#xff0c;备受开发者喜爱。然而&#xff0c;在传输和存储过程中&#xff0c;我们需要保护Vue代码的安全性。混淆是一种有效的保护措施&#xff0c;可以加密和压缩代码…

简单构造好题

没啥思路&#xff0c;看到题解&#xff0c;先处理最大值&#xff0c;发现非常的nice // Problem: C. Polycarp Recovers the Permutation // Contest: Codeforces - Codeforces Round 756 (Div. 3) // URL: https://codeforces.com/problemset/problem/1611/C // Memory Limit:…