异步更新

在这里插入图片描述

原因

1设置为异步提升性能 如果setState每次调用直接执行,会造成 render 函数被频繁执行 ,页面重新被渲染 解决:异步批处理

2如果render函数未执行时,保证props和state一致性

拿到最新state的方法

法一:setState()中第二个数据是一个回调函数,通过这个回调函数拿到最新的数据

法二:componentDidUpdate()获取到最新的数据

先执行声明周期函数在执行回调函数的

在版本17之前有同步更新

情况一:在setTimeout()中

情况二:在原生dom事件中

在这里插入图片描述

进行合并

在这里插入图片描述

输出的值为1 仅进行一次加1操作

如何避免:使用函数式更新

在这里插入图片描述

原因:在setState源码中进行判断,是函数的话会进行call方法的调用,不是进行合并

React的更新机制

JSX => 虚拟dom =>真实dom

更新 state或者props改变 => render函数重新执行 => 比较新旧虚拟dom树的差别 =>做出更新

diff算法 将比较两颗树的时间复杂度优化到了O(n)的数量级

1.同级比较,不夸层 2。类型不同直接删除 3.引入key值‘

key值 尾插时性能优化不大,在中间插入时引入key值用来匹配确定唯一元素

在这里插入图片描述

嵌套组件的render被调用 父组件渲染引起子组件更新

解决方法 更新阶段函数 shouldComponentUpdate

// 阻断更新函数shouldComponentUpdate(nextProps,nextState){if(this.state.counter!=nextState.counter){return true}return false}

在这里插入图片描述

每个类里都需要 手写shouldComponentUpdate()函数

解决方法 类组件继承PureComponent 会自动进行浅比较生成shouldComponentUpdate

原理:更新时shouldCompenontUpdate决定组件是否在render时更新

源码里面判断是否用户自己定义了compenontUpdate函数

而在pureComponent中如果继承自这个,没有走上面的流程而是进行一次浅比较

在这里插入图片描述
进行state和props的浅层比较 如果没有的话就不更新 return false

函数组件如何避免重复调用吗 memo 和 usememo一起去使用

作用:当函数props改变时才去重新渲染 ,可以传入一个自己的compare比较函数,默认浅层比较

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汉代大模型:历史镜像与智能重构的深度对话

引言:当历史遇见人工智能 一件汉代陶俑的三维模型正通过增强现实技术向观众演绎农耕场景。这个看似寻常的文物活化案例,实则蕴含着人工智能与历史学交叉领域的前沿探索——汉代大模型。作为连接过去与未来的智能载体,汉代大模型不仅重构了我…

es向量检索里的efSearchc参数是干嘛用的

在Elasticsearch的向量检索中,ef_search(或efSearch)是控制HNSW近似最近邻(ANN)搜索精度与性能平衡的关键参数,其作用机制和影响如下: 🛠️ 一、核心作用 ef_search 限制底层图遍历…

Mac SSH终端操作工具 SecureCRT

SecureCRT Mac 是一款SSH终端工具,为计算专业人士提供高级会话管理工具。 也是一个功能强大且值得信赖的基于GUI的SHH和Telnet客户端,以及旨在提高工作效率并简化重复任务的终端仿真器。 借助SecureCRT mac版的帮助,您可以通过对ANSI&#…

UE5关卡快照

关卡快照(Level Snapshots) 使你能够在关卡的 世界大纲视图(World Outliner) 中保存 Actors 的特定配置,并立即将场景恢复到该状态。这样可以大幅简化复杂的设置,并避免对不同场景同一关卡的多个变体进行复…

Maven 或 Gradle 下载和添加 jar 文件的步骤

使用 Maven 或 Gradle 来自动下载和添加 jar 文件是管理 Java 项目依赖的最佳方式。 以下是如何使用 Maven 和 Gradle 来自动下载和添加 jar 文件的步骤: 使用 Maven # 创建一个 Maven 项目: mvn archetype:generate -DgroupIdcom.example -Dartifact…

JVM对象创建全流程解析

一、JVM对象创建流程 Ⅰ、类加载检查——JVM创建对象时先检查类是否加载 在虚拟机遇到new指令时,比如new关键字、对象克隆、对象序列化时,如下字节码 0: new #2 // class com/example/demo/Calculate检查指令的参数&#x…

深度学习从入门到精通:PyTorch实战与核心原理详解

掌握深度学习核心概念,玩转PyTorch框架,从理论到实战一站式学习指南 🚀 一、深度学习全景图 🌟 人工智能金字塔 🔍 深度学习核心优势 ​​优势​​​​劣势​​​​适用场景​​自动特征提取依赖大数据图像识别&…

计算机网络期末 物理层

目录 数据通信基础(理解) 传输介质(熟悉) 基带传输(熟悉) 数字编码(熟悉) 频带传输与调制解调(理解) 多路复用技术(了解) 物理层设备与极限速率(掌握) 数据通信基础(理解) 一堆概念 通信的类型 同步技术 传输介质(熟悉) 有线介质 同轴电缆 双绞线 光纤 无线介质 无线电…

力扣-139.单词拆分

题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 class Solution {public boolean wordBrea…

LeetCode-1679. K 和数对的最大数目

给你一个整数数组 nums 和一个整数 k 。 每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。 返回你可以对数组执行的最大操作数。 地址:https://leetcode.cn/problems/max-number-of-k-sum-pairs/description/?envTyp…

相机camera开发之差异对比核查四:测试机和对比机的Camera动态参数差异对比及关键字

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、背景 二、:Camera动态参数差异 2.1:动态参数差异核查项 2.2 :动态参数差异核查关键字 2.3 :前置普通拍照动态参数 2.4 :后置普通拍照动态参数 2.5 :后置人像模式…

ModbusTCP转Profibus网关在配料系统中的配置实践

在现代饲料企业的生产过程中,自动化技术的应用日益广泛。其中,ModbusTCP和Profibus是两种常见的工业通信协议,它们在数据采集和设备控制方面发挥着重要作用。然而,由于这两种协议在技术上的差异,直接互通往往存在困难。…

双馈风机分段控制策略的一次调频模型深度解析

双馈风机分段控制策略的一次调频模型深度解析 摘要 随着风电渗透率的急剧攀升,电力系统惯性降低与一次调频能力弱化问题日益凸显。双馈感应发电机(DFIG)凭借其优越的性能已成为主流机型,但其常规控制策略使其自然不具备响应系统频率变化的能力。本文深入探讨基于分段控制策…

JMeter 高阶玩法:分布式压测的技术核心技术要点

在2025年的数字化浪潮中,网站和应用的性能直接决定用户体验和业务成败!想象一下,双十一促销期间,你的电商平台因无法承受高并发而崩溃,或者金融系统在高峰期响应迟缓——这不仅是技术问题,更是商业灾难&…

在 Windows 和 Linux 下使用 C/C++ 连接 MySQL 的详细指南

前言 MySQL 是一种流行的关系型数据库管理系统,广泛应用于各种应用程序中。C/C 作为高性能编程语言,常被用于需要与数据库交互的开发中。下面详细讲解如何在 Windows 和 Linux 平台下使用 C/C 连接 MySQL 数据库,帮助你快速上手。 准备工作 …

【人工智能基础】初识神经网络

初识神经网络 本章通过战胜人类围棋世界冠军的AlphaGo案例,介绍神经网络的基本概念,并阐明其与人工智能、机器学习的关系。 1. AlphaGo与围棋:神经网络的实力展示 传统围棋程序:基于固定规则 早期的计算机程序依赖人类专家预先设定的策略(“如果A情况发生,则执行B步骤”…

ffmpeg webm 透明通道视频转成rgba图片

import subprocess def webm_to_bgrapng(webm_video_path,bgra_dir):command [ffmpeg,-vcodec, libvpx-vp9, # 指定输入视频编码为 VP9-i, webm_video_path, # 输入视频路径-pix_fmt, "rgba", # 输出 RGBA 格式(保留 Alpha 通道)bgra_dir …

SQLite 数据库操作完整指南

SQLite 数据库操作完整指南 全面的 SQLite 数据库操作手册,涵盖从基础操作到高级优化的所有内容 目录 ** SQLite 简介与特点 创建和连接数据库 创建表 数据类型和约束 插入数据 查询数据 更新数据 删除数据 多表查询 视图 索引优化 触发器 事务处理 全文搜索 JSO…

Python Luigi 【工作流管理库】简介

想全面了解DeepSeek的看过来 【包邮】DeepSeek全攻略 人人需要的AI通识课 零基础掌握DeepSeek的实用操作手册指南【限量作者亲笔签名版售完即止】 玩转DeepSeek这本就够了 【自营包邮】DeepSeek实战指南 deepseek从入门到精通实用操作指南现代科技科普读物AI普及知识读物人工智…

微服务中分布式事务:Saga模式、TCC模式与消息队列

Saga模式 Saga模式是一种基于补偿的事务管理机制,它将一个长事务分解为多个本地事务,每个本地事务都有一个对应的补偿事务。当某个本地事务执行失败时,Saga模式会依次调用前面已成功执行的本地事务的补偿事务,以实现事务的回滚。…