React Hooks批量更新问题
React 版本17.0.2
import React, { useState } from 'react';const Demo = () => {const [count, setCount] = useState(0);const [count1, setCount1] = useState(0);const [count2, setCount2] = useState(0);console.log('===Demo==');const add = async () => {await 10;setCount(count + 1);setCount1(count1 + 1);setCount2(count2 + 1);};return (<div><div onClick={add}>button</div><div>{count}</div><div>{count1}</div><div>{count2}</div></div>);
};export default Demo;
每次点击button ,log会执行3次,当我们把async方法里面的await去掉,让他变成正常方法,那么点击button就会执行一次。
同样代码在React 版本18.2.0时候点击button,log只会打印一次。
再次修改代码对同一个状态同时执行多次更改
import React, { useState } from 'react';const Demo = () => {const [count, setCount] = useState(0);console.log('===Demo==');const add = async () => {await 10;setCount(count + 1);setCount(count + 1);setCount(count + 1);setCount(count + 1);setCount(count + 1);setCount(count + 1);};return (<div><div onClick={add}>button</div><div>{count}</div></div>);
};export default Demo;
React 17.0.2 log会打次2次,也就是对于同一状态同时多次修改,那么React会合并一起更改,log打印两次是因为在开发环境下,会多执行一次。
React18,还是只会打印一次log。
总结:
React 17.0.2 在异步方法中,多个状态同时修改会造成页面刷新多次,同一状态同时多次修改页面只会刷新一次
React 18 默认在异步方法中开启了批量更新没有问题。
React 17.0.2解决方案:使用unstable_batchedUpdates
import React, { useState } from 'react';
import { unstable_batchedUpdates } from 'react-dom'; // 批量更新状态时使用const Demo = () => {const [count, setCount] = useState(0);const [count1, setCount1] = useState(0);const [count2, setCount2] = useState(0);console.log('===Demo==');const add = async () => {await 10;unstable_batchedUpdates(() => {setCount(count + 1);setCount1(count1 + 1);setCount2(count2 + 1);});};return (<div><div onClick={add}>button</div><div>{count}</div><div>{count1}</div><div>{count2}</div></div>);
};export default Demo;
log只会打印一次
相关文章:
React Hooks批量更新问题
React 版本17.0.2 import React, { useState } from react;const Demo () > {const [count, setCount] useState(0);const [count1, setCount1] useState(0);const [count2, setCount2] useState(0);console.log(Demo);const add async () > {await 10;setCount(c…...
竞赛 深度学习YOLO抽烟行为检测 - python opencv
文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习YOLO抽烟行为检测 该项目较为新颖,适合作为竞赛课…...
cAdvisor监控Docker容器做性能测试
cAdvisor监控Docker容器做性能测试 缘起 当前有个服务做技术选型,服务要求比较高的性能,要做性能测试。部署的环境是容器话部署,但申请新的容器流程较长,于是我打算在流程走完之前简单评估下性能,来确定技术选型是否…...
记一次EDU证书站
如果文章对你有帮助,欢迎关注、点赞、收藏一键三连支持以下哦! 想要一起交流学习的小伙伴可以加zkaq222(备注CSDN,不备注通不过哦)进入学习,共同学习进步 目录 目录 1.前言: 2.信息搜集 3.漏…...
React高频面试题100+题,这一篇就够了!
1 - 5 题详解传送门>>>>>>>>>>>> 1. 如何在代码中判断一个 React 组件是 class component 还是 function component? 2. useRef / ref / forwardsRef 的区别是什么? 3. useRef和useState区别? 4. useEffect 的…...
mysql MVC jsp实现表分页
mysql是轻量级数据库 在三层架构中实现简单的分页 在数据库sql编程中需要编写sql语句 SELECT * FROM sys.student limit 5,5; limit x,y x是开始节点,y是开始节点后的需要显示的长度。 在jdbc编程中需要给出x和y 一般是页数*页码,显示的长度。 代…...
【微信小程序】数字化会议OA系统之首页搭建(附源码)
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《微信小程序开发实战》。🎯Ἲ…...
Leetcode——二维数组及滚动数组练习
118. 杨辉三角 class Solution { public:vector<vector<int>> generate(int numRows) {// 定义二维数组vector<vector<int>> num(numRows);for(int i0;i<numRows;i){//这里是给内层vector定义大小。默认是0,这里n是个数,不是值num[i].re…...
钢水包升降翻转液压系统比例阀放大器
钢水包升降翻转液压系统是一种用于控制钢水包升降和翻转的液压系统。该系统主要由液压泵、液压缸、控制阀和一些辅助元件组成。 钢水包升降翻转液压系统的液压泵将油从油箱中抽出,将油压力提高到一定值,然后通过控制阀将油分配到液压缸中。液压缸内的活…...
通达OA-通用版-V12,流程及表单自定义好用的类
通达OA-通用版-V12,流程及表单自定义好用的类 V1.0 V1.0 日期:2023年10月19日 新建类文件,将下面代码复制到文件中即可。 功能说明: 1、根据flow_id,可以获取流程表单相关的表名、及字段名。 2、根据run_id࿰…...
如何在vue中实现图片懒加载
1.什么是图片懒加载 概念当图片还未出现在浏览器的可视区,图片并不加载src所引入的图片资源。只有当图片出现在可视区时,才加载图片资源。 好处:当页面中需要许多图片进行展示。但是,在我们不可视区的图片我们可以进行图片懒加载…...
Mac 远程桌面软件
对于使用 Mac 计算机和笔记本电脑的企业来说,适用于 Mac 的远程桌面软件变得越来越重要,随着远程工作变得越来越普遍,IT 管理员和组织需要一种安全的方式来访问和修复问题、处理紧急任务以及监控远程工作站的状态,为了促进远距离协…...
EPLAN_005#宏边框、页宏、窗口宏/符号宏
一、宏边框 红边框不能用,变成了灰色 要在项目属性中更改位宏项目——才能使用宏边框功能 注意:创建宏边框时候要打开——显示隐藏元素 框选目标后,双击红边框的边——弹出红边框创建属性对话框——输入名称——更改变量ABC等 最后——自动…...
如何正确地使用ChatGPT(角色扮演+提示工程)
如何正确地使用ChatGPT 一、ChatGPT介绍二、准备工作2.1 获取ChatGPT环境2.2 确定使用ChatGPT的目标和需求 三、重要因素3.1 角色赋予3.2 提示工程 四、正确案例 一、ChatGPT介绍 可以查阅ChatGPT快速入门 二、准备工作 2.1 获取ChatGPT环境 国外的有OpenAI和微软NewBing等…...
MySQL服务安装与登录
(1)以管理员身份启动命令提示符: (2)定位到安装目录的bin目录下(根据自己的安装路径进行调整即可)。先输入“d:”,定位到d盘,输入cd空格文件路径(直接复制粘贴…...
论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》
目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…...
性能测试基础知识及性能指标
前言:最近公司接了个项目,领导开会突然来了句,让我出一份性能测试方案,后面性能测试工作交给我!我心里想之前面试没要求会这个啊(最少得加钱才能做吧~,没办法既然下达了指令,那就只能…...
ArcGIS笔记10_如何创建渔网?
本文目录 前言Step 1 确定渔网的精度单位Step 2 有底图时创建渔网的操作 前言 ArcGIS中的渔网是一个很好用的工具,它可以创建出规规整整的小格子,每个小格子都对应一个标注点,可以将原本散乱的数据规整化,如下图: Ste…...
Jmeter安装(快速入门)
大家好我是苏麟今天简单聊一下Jmeter . Jmeter Jmeter官网 : Apache JMeter - Download Apache JMeter 安装Jmeter Jmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。 下载 : 官网下载 : 网盘自取 : 链接:…...
一个react前端项目中的配置文件作用解析
前端框架中用到的配置文件 .editorconfig, .gitignore, .npmrc, .prettierignore, .prettierrc, .umirc.local.ts, .umirc.ts, package-lock.json, package.json, README.md, tsconfig.json, typings.d.ts, webpack.config.js.editorconfig:用于定义代码编辑器的配…...
3步轻松解密网易云音乐NCM文件:解锁你的音乐自由之旅
3步轻松解密网易云音乐NCM文件:解锁你的音乐自由之旅 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了心爱的网易云音乐歌曲,却发现在其他播放器上无法播放?这并非你的设备问题&am…...
5步掌握ExtractorSharp:终极游戏资源编辑与补丁制作工具
5步掌握ExtractorSharp:终极游戏资源编辑与补丁制作工具 【免费下载链接】ExtractorSharp Game Resources Editor 项目地址: https://gitcode.com/gh_mirrors/ex/ExtractorSharp ExtractorSharp是一款功能强大的开源游戏资源编辑器,专门用于编辑和…...
抖音下载神器:3分钟掌握批量无水印下载技巧,免费提取视频音乐原声!
抖音下载神器:3分钟掌握批量无水印下载技巧,免费提取视频音乐原声! 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite dedupli…...
副业收入超过主业:软件测试从业者如何打造第二曲线?
当主业增长触及天花板在技术日新月异的今天,软件测试工程师的职业发展路径正变得愈发清晰,同时也可能逐渐陷入一种“专业舒适区”。资深测试工程师、测试架构师、测试经理……沿着这条既定路线攀登,收入的增长曲线往往在达到一定高度后趋于平…...
物理AI推动人机协作迈向新阶段研究报告凯捷 2026_01
这份凯捷 2026 年《物理 AI:推动人机协作迈向新阶段》报告核心结论:物理 AI 正让机器人从预编程工具变成可感知、自适应、能学习的现实世界智能合作者,已到规模化拐点,将重构各行业生产力与人机协作模式。一、核心定义:…...
探索 MCP 协议:构建下一代 AI Agent 的标准化基石
探索 MCP 协议:构建下一代 AI Agent 的标准化基石 引言 随着大语言模型(LLM)能力的飞速提升,AI Agent(智能体)正逐渐从简单的对话机器人演变为能够自主调用工具、操作数据库和执行复杂任务的智能实体。然而…...
深入浅出:学习 Claude Code,掌握 AI 程序员协作新技能
随着 Agentic Coding 的兴起,AI 编程助手进化为能自主规划任务的「AI 程序员」。Anthropic 推出《Claude Code: A Highly Agentic Coding Assistant》课程,由 Elie Schoppik 和吴恩达的 DeepLearningAI 联合授课,教授与 AI 程序员高效协作的方…...
大模型训练全链路指南:从经典架构到AI自进化,每个环节的核心逻辑与避坑指南
本文深入浅出地拆解了大模型端到端训练的完整闭环,涵盖了预训练、中期训练、多阶段后训练以及验证与部署适配四个核心阶段。文章详细阐述了每个环节的核心目标、适用场景、抉择逻辑与避坑红线,旨在为个人开发者、中小企业和大厂研发团队提供有益的参考。…...
别再死记硬背了!一张图帮你理清线性方程组‘有解无解’的所有情况
线性方程组解的类型判定:从几何直观到矩阵秩的完美映射 每次面对线性方程组解的判定问题时,你是否总在纠结该用哪个定理?齐次与非齐次、有解无解、唯一解还是无穷多解——这些概念确实容易混淆。但事实上,只要理解了背后的几何意义…...
别再手动写列了!用Vue3 + vxe-grid动态渲染表格的保姆级教程
Vue3 vxe-grid动态表格实战:告别手动列配置的时代 每次接到新需求要加三个字段时,你是不是还在手动修改columns配置?当后端数据结构频繁变动时,是否还在重复着"改字段->测试->发布"的机械操作?今天我…...
