React state用法 异步总结

setState用法

基本使用
this.setState({message:'message'})
函数式使用
this.setState((state,props)=>{//可加入修改数据之前的一些数据处理逻辑return{message:"message"}
})
  • 可加入修改数据之前的一些数据处理逻辑
  • React会自动把state,props作为参数传递进来
异步操作(批处理)
this.state={message:"初始数据"}
this.setState({message:'修改后数据'})
console.log(this.state.message)  #  初始数据
  • 之所以会这样 是因为 设置值的时候 是异步操作

  • 如果想获取修改后的数据可这样用

    • this.state={message:"初始数据"}
      this.setState({message:'修改后数据'},()=>{console.log(this.state.message)  #  修改后数据
      })
      
为什么设计为异步?
  • 设置为异步操作 可以显著提升性能
    • 如果每次改变state 都会执行render函数 那么界面就重复渲染 效率是很低的
    • 异步将state改变加入队列当中 批量去调用render 那么render只会被调用一次
  • 如果设置为同步 可能会出现
    • 数据发生修改 但是render函数并未调用完成
      • 那么传递给子组件的props依旧为原来的值,就会造成state和props不同步的问题
      • state和props不一致 在开发中很容易造成不可知问题
同步情况 React 18 之前
  • 以下三种操作React并不会进行批量异步处理(18之前)

    • setTimeout
    • Promise
    • 原生
  • 18之后 全部都会被加入react异步处理队列当中 进行批处理

强制同步更新 不进行批处理
import {flushSync} from "react-dom"flushSync(()=>{this.setState({message:"new message"})
})
知识点
  • React中并没有实现类型Vue2中的Object.defineProperty和Vue3中的proxy的方式去监听数据的变化
  • 必须通过setState去告知React数据发生了变化
  • setState是从Component中继承过来的

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

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

相关文章

docker使用canal

1. 准备MySql主库 1.1.在服务器新建文件夹 mysql/data,新建文件 mysql/conf.d/my.cnf 其中my.cnf 内容如下 [mysqld] log_timestampsSYSTEM default-time-zone8:00 server-id1 log-binmysql-bin binlog-do-db mall # 要监听的库 binlog_formatROW配置解读&#…

微服务-6 Gateway网关

一、网关搭建 此时浏览器访问 localhost:10010/user/list 后正常返回数据,说明网关已生效,其原理流程图如下: 二、网关过滤器 作用:处理一切进入网关的请求和微服务响应。 1. 网关过滤器的分类: a. 某个路由的过滤器 …

CSS实现三栏自适应布局(两边固定,中间自适应)

绝对定位的元素会脱离文档流,它们是相对于包含块(通常是最近的具有相对定位、绝对定位或固定定位属性的父元素)进行定位的。当你把一个绝对定位的元素的高度设置为100%时,它会相对于其包含块的高度来确定自己的高度。如果包含块是…

Flutter 中 AutomaticKeepAliveClientMixin 的介绍及使用

在 Flutter 中,当你在一个页面中滑动列表或者进行其他一些操作时,如果你返回到该页面,可能会发现之前的状态已经丢失了。这在某些情况下可能是不可取的,特别是当你想要保留之前的状态,而不是每次都重新加载页面时。 为…

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(一)(含2022年和2023年)

文章目录 前言1、已知a = 1b1;b = 3b001,那么{a,{2{b}}} = ( )2、在一个SOC中数据通路中,Master到Slaver 的单命令完成Latency是100Cycle,能支持的最大命令Outstanding是10,则完成10个命令访问的最小平均Latency大约是( )3、generate语句中的循环控制变量应该定义为( )类…

C#WPS导出EXCEL

1、首先安装金山WPS ,然后在安装包中找到 etapi.dll 这个文件,导入到项目中,然后添加引用 在引用中出现EXCEL 就是已经将API导入到了程序中, 2、在命名空间中引用 using Excel; 3、开始编写导出程序,本例以datagridvi…

微信小程序压缩图片到200kb,递归设置压缩质量

一、背景 我们有个人脸识别门闸的功能,小程序上上传人脸照片,然后门闸识别人脸开门。图片大小要在在200kb,但是也不能压缩的太小,因为大小有可能识别不到或者要走很近才能识别。所以选择递归的方式实现图片的压缩。 二、代码实现…

技术解析:应对国内大流量攻击的新挑战与分布式清洗防御策略

近日,国内网络环境中出现的大流量攻击事件频发,且攻击规模呈指数级增长,部分攻击流量甚至超过了1.5Tbps。 这背后的主要原因是攻击者利用海外流量资源,通过复杂的网络技术和协议转换,将国际IPv4/IPv6流量巧妙伪装并转…

实战自动化创建用户,并设置密码

一、主程序 #!/bin/bash# 创建用户并设置密码的函数 create_user() {local username$1local password$2if id "$username" &>/dev/null; thenecho "用户 $username 已经存在。"elseecho "正在创建用户 $username ..."useradd $usernamee…

【PostgreSQL内核学习(二十九)—— 执行器(ExecCreateTableAs)】

执行器(ExecCreateTableAs) ExecCreateTableAs 函数RangeVarGetCreationNamespace 函数RangeVar 结构体IntoClause 结构体 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊重他人的知识产权和学术成果,力求…

python篇---图片转成视频

python篇—图片转成视频 import cv2 import os# 设置图片文件夹路径和视频输出路径 image_folder /workspace/11 video_name output_video.mp4# 获取图片文件夹中的所有图片文件名,并按顺序排序 images [img for img in os.listdir(image_folder) if img.endswi…

C++的引用和内联函数,auto

什么是引用 引用就是取别名 可以给一个变量取多个别名,也可以给别名取别名 别名与本名拥有同一地址,对任意别名修改,也会同时修改其他别名和本名 引用的作用 引用的作用与指针重叠度很高 图中函数的参数int& a,int& b,a是x的别名,b是y的别名 则ab的交换就是xy的交…

ActiveMQ消息中间件面试专题

1.什么是 ActiveMQ? activeMQ 是一种开源的,实现了 JMS1.1 规范的,面向消息(MOM)的中间件,为应用程序提供高效的、 可扩展的、稳定的和安全的企业级消息通信 2. ActiveMQ 服务器宕机怎么办? 这得从 ActiveMQ 的储存机制说起。…

怎么快速围绕“人、货、场”做零售数据分析?

做零售数据分析多了,不难发现零售数据分析的关键就是“人、货、场”,那么怎么又快又灵活地分析这三个关键点?不妨参考下奥威BI零售数据分析方案。 奥威BI零售数据分析方案是一套吸取大量项目经验,结合零售企业数据分析共性需求打…

【Java8新特性】四、强大的Stream api

​ 这里写自定义目录标题 一、了解Stream二、流(stream)到底是什么?三、Stream操作的三个步骤四、创建Stream的四种方式五、Stream 的中间操作1、筛选和切片2、map 映射3、排序 六、Stream 的终止操作1、查找和匹配2、归约3、收集 一、了解Stream Stream是Java8中…

同旺科技 USB TO SPI / I2C 专业版 极限测试 ---- 读取数据

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 备注:带EXCEL调试的只适用于专业版; 软件配置: 设置如下,读取65500个字节,单条指令,速率20Mhz; 数据: 时钟信号&#…

Day10:学习尚上优选项目

学习计划:完成尚硅谷的尚上优选项目 学习进度:尚上优选项目 知识点: 五、尚上优选微信小程序端 订单支付 需求分析 页面效果功能分析对应接口 开发接口 创建service-payment模块 创建子模块service-payment创建配置文件创建启动类引入依赖…

微信扫码授权登录成功后,重定向用户回到他们最初尝试访问的URL

你的需求是在微信扫码授权登录成功后,重定向用户回到他们最初尝试访问的URL,而不是重定向到一个固定的页面。为了实现这一点,你需要在用户登录前,将他们尝试访问的页面URL保存起来,然后在登录成功后,使用这…

了解 Python 中 gc.collect() 命令

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 在 Python 中,gc.collect() 命令是用于手动触发垃圾回收机制,以回收无法访问的对象所占用的内存。Python 的垃圾回收机制主要基于引用计数,辅以 “标记-清除” 和 “…

echarts坐标轴、轴线、刻度、刻度标签

坐标轴 x、y轴 x 轴和 y 轴都由轴线、刻度、刻度标签、轴标题四个部分组成。部分图表中还会有网格线来帮助查看和计算数据 普通的二维数据坐标系都有x轴和y轴,通常情况下,x轴显示在图表底部,y轴显示在左侧,一般配置如下&#xf…