redux与react18setState触发render问题

最近在做一个需求,需要用im做那个协同。
刚好遇到一个比较有意思的问题。
具体问题就不赘述了。
根本原因就是在修改state的时候,触发了两次重渲染。

后面也是做了一些验证
demo

function App() {const [state, setState] = useState("");const dispatch = useDispatch();const visible = useTypeSelector((state) => state.test.visible);console.log("render", {state,visible,});const change = () => {setState("abc");dispatch(changeState({visible: !visible,}));};return <div onClick={change}>app {visible ? "visible" : ""}</div>;
}

这是一个很纯粹的demo。
点击之后会渲染多少次呢?
是一次。
好像没问题。
但是在实际遇到的问题是渲染两次,于是为了复刻当时的场景,我把函数放到window,然后直接调用。

function App() {const [state, setState] = useState("");const dispatch = useDispatch();const visible = useTypeSelector((state) => state.test.visible);console.log("render", {state,visible,});// @ts-ignorewindow.change = () => {setState("abc");dispatch(changeState({visible: !visible,}));};return <div>app {visible ? "visible" : ""}</div>;
}

执行一次函数会触发两次渲染。
这么奇怪,当然后面我也以为是状态多少的问题。
组件内定义多几个state也一样的。
那是什么问题呢。
对react比较了解同学应该都知道,state的更改有异步和同步两种。
但是也不合理对吧,如果是同步的,那不应该修改几个state就渲染几次吗?
这就要去看看文档了
在这里插入图片描述
这就能解释了。
后面也是用定时器执行了函数,确实也是渲染两次。

后面猜测应该是redux没有做类似自动批处理,所以在一些情况下还是同步更改state,而react18已经做了一些功能调整现在都是异步了,也做了自动批处理,所以就会有类似的问题,当然只是猜测。
redux尝试升级到新版本也存在问题,但是结合场景还是有一些解决办法,这里也就不说了,大家少踩坑,但是踩坑也会提升实力,印象也会更深刻。

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

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

相关文章

JDK、JRE、JVM相关知识点

1、JDK、JRE、JVM三者的关系 JDK‌&#xff1a;Java开发工具包&#xff0c;包括编译工具&#xff08;javac.exe&#xff09;、打包工具&#xff08;jar.exe&#xff09;等&#xff0c;也包含JRE。JDK是开发Java程序的主要工具包&#xff0c;包括了Java运行环境、Java工具和Jav…

C++之设计原则

在C中&#xff0c;设计原则是一套指导软件开发过程中决策和设计模式的准则&#xff0c;旨在提高软件的可维护性、可扩展性、灵活性和可靠性。 以下是几种核心设计原则&#xff1a; 1.单一职责 功能单一&#xff0c;方便组合和复用。 图示&#xff1a; 应用场景&#xff1a;…

【2024CANN训练营第二季】Ascend C概述

什么是算子 算子在神经网络中的定义 算子对应网络中层或者节点的计算逻辑 算子的数学含义 算子在数学中的定义&#xff1a; 一个函数空间到函数空间上的映射O&#xff1a;X->X&#xff1b; 广义&#xff1a; 对任何函数进行某一项操作都可以认为是一个算子。比如微分算…

redis IO多路复用机制

目录 一、五种 I/O 模型 1.阻塞IO&#xff08;Blocking IO&#xff09; 2.非阻塞IO&#xff08;Nonblocking IO&#xff09; 3.IO多路复用&#xff08;IO Multiplexing&#xff09; 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO&#xff08;Signal Driven …

SD-WAN技术的特点和应用场景

近年来&#xff0c;SD-WAN逐渐成为企业网络建设中的热门技术。那么&#xff0c;SD-WAN到底是什么呢&#xff1f;简而言之&#xff0c;SD-WAN&#xff08;软件定义广域网&#xff09;结合了软件定义网络&#xff08;SDN&#xff09;与广域网优化技术&#xff0c;为企业提供了更加…

一文读懂:Session、Cookie与Token

我是小白刚刚接触JWT&#xff0c;看了b站一些相关视频、查了中国知网和csdn其他人的文章之后&#xff0c;总结出了这篇文章。写文章的初心是为了检验自己是否透彻了解了知识点以及之后复习。如果标题党了&#xff0c;斯米马赛请原谅&#xff01;&#xff01;&#xff01;欢迎大…

企业AI助理与知识库管理系统:重塑企业知识管理的新篇章

在数字化转型的浪潮中&#xff0c;企业正面临着前所未有的机遇与挑战。如何高效管理、快速获取并利用企业内部的知识资源&#xff0c;成为了提升企业竞争力的关键。近年来&#xff0c;企业AI助理与知识库管理系统的结合&#xff0c;正逐步成为企业知识管理的新趋势&#xff0c;…

【C语言】循环嵌套:乘法表

循环嵌套&#xff0c;外层循环执行一次&#xff0c;内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能&#xff1a;循环嵌套 乘法表 时间&#xff1a;2024年10月 地点&#xf…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器&#xff0c;放了很多年&#xff0c;具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了&#xff0c;结果搬出去有了第1个孩子&#xff0c;孩子小的时候也没时间折腾&#xff0c;等孩子大一点的时候&#xff0c;又有…

使用Python PyQt5 vscode 制作流水灯或者交通灯

需要用到 Python PyQt5 vscode&#xff0c;其他的各模块引用在代码里面有&#xff0c;自己找找就行 制作流水灯代码 import sys from PyQt5.QtCore import (QEvent, QTimer, Qt,QPoint) from PyQt5.QtWidgets import (QApplication, QMenu,QMainWindow) from PyQt5.QtGui imp…

限时设计ui

ctrl-------放大缩小 空格-----画面移动 alt------复制 页面<画板<图层 添加交互事件 原型 点击蓝色的圆&#xff0c;从1跳转到2 点击绿色的圆&#xff0c;从2跳转到1

如何实现安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯

在工业自动化中&#xff0c;实现不同品牌、不同型号设备之间的通讯是确保生产流程顺畅、高效运行的关键。本文详细介绍了安川MP3300运动控制器与西门子1200系列PLC进行ModbusTCP通讯的具体方法。 一&#xff0e;软硬件需求 1.一台安川MP3300CPU301&#xff0c;其IP地址是192.…

类和对象的认识

类&#xff1a;类是用来描述一个对象的&#xff0c;在java中万物皆对象&#xff0c;通过对类的抽象&#xff0c;类有哪些属性和行为&#xff0c;将这些抽象出来就是类。比如&#xff1a;狗&#xff0c;有名字&#xff0c;年龄&#xff0c;要吃饭的行为等等&#xff0c;将这些动…

ssh连接慢的问题或zookeeper远程连接服务超时

问题原因&#xff1a; 在SSH登录过程中&#xff0c;服务器会通过反向DNS查找客户端的主机名&#xff0c;然后与登录的IP地址进行匹配&#xff0c;以验证登录的合法性。如果客户端的IP没有域名或DNS服务器响应缓慢&#xff0c;这可能导致SSH登录过慢。为了解决这个问题&#xf…

【无处躲藏的图片】和【时隐时现的图片】

文章目录 一、效果二、源码1. pom依赖2. 核心源码13. 核心源码2 一、效果 二、源码 1. pom依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.9</version></dependency…

vue3基础入门以及常用api使用

setup setup 的返回值可以是函数 data(){ return { a:111, c:this.name } }, setup(){ let name 1111 return ()> 哈哈哈 }//结果页面就是会显示 哈哈哈setup和 OptionsAPI关系 data能和setup能同时存在&#xff0c;但不建议 data能读到setup里边的数据 setup是最早的生命…

【二刷hot-100】day2

目录 1.无重复字符的最长子串 2.找到字符串中所有字母异位词 3.和为 K 的子数组 4.滑动窗口最大值 1.无重复字符的最长子串 class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> dict new HashMap<>();int ret0;int i-1;for…

使用 GoZero 框架实现一个简单的course课程class系统

使用 GoZero 框架实现一个简单的课程增删改查&#xff08;CRUD&#xff09;功能需要进行以下步骤&#xff1a;设置 GoZero 项目、定义数据模型、创建相应的 API 接口以及实现 CRUD 操作。下面是一个示例代码&#xff0c;包括基本的课程管理功能。 ### 1. 安装 GoZero 首先&…

基于SSM党务政务服务热线管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;部门管理&#xff0c;办事信息管理&#xff0c;信息记录管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;部门&#xff0c;信息…

十月编程语言排行榜~

前言&#xff1a;TIOBE编程语言排行榜通过分析全球开发者的活动、代码搜索和问答社区的流量&#xff0c;提供了编程语言受欢迎度的动态图景。该指数是技术趋势的风向标&#xff0c;揭示了哪些编程语言在技术领域占据主导地位&#xff0c;哪些语言正在快速崛起或逐渐衰退。 ✨✨…