位置: IT常识 - 正文

React hooks中 useState踩坑-=--异步问题

编辑:rootadmin
React hooks中 useState踩坑-=--异步问题

推荐整理分享React hooks中 useState踩坑-=--异步问题,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

useState作为最常见的一个hook,在使用中总是会出现各种坑,最明显的就是 useState 更新异步的问题。

比如我们把接口返回的数据,使用 useState 储存起来,但是当后面去改变这个数据的时候,每次拿到的都是上次的数据,无法实时更新。

React hooks中 useState踩坑-=--异步问题

或者我们在函数内部使用 setState ,然后立即打印 state,打印的结果还是第一次的state 的值。比如下面的代码实例。

const [data, setData] = useState('111'); const handleTest = () => { console.log(data) // 111 setName('222') console.log(name) // 111 }原因:

useState 返回的更新对象的方法是异步的,要在下次重绘才能获取新值,不要试图在更改状态之后立即获取状态。

1. useState 使用的两种方式

我们知道,useState中的 [ ] 是一个解构运算,第一个是设置的值,第二个是用来改变 state 的方法。

1. 直接传入新值const [data, setData] = useState(1)setData(data + 1)2. 传入回调函数 setState(callback)const [data, setData] = useState(0)setData((prev) => prev + 1); // prev 是data 改变之前的值,return 返回的值会作为新状态覆盖data

一般情况下,我们使用第一种方式即可,但在某些特殊情况下,第一种方式获取到的值不是最新设置的。

2. 解决方案2.1 使用 useRef

思路:先使用 useRef 进行存储数据,再使用 useEffect 监听数据变化,并进行更新。

import React, { useState, useEffect, useRef } from 'react';const Index = () => {const [info, setInfo] = useState()const infoRef = useRef()useEffect(() => {infoRef.current = info}, [info])}

在之后需要使用 info 数据的地方只需要获取 infoRef.current 即可获取最新的 info 数据内容。

2.2 使用回调函数更改数据const [data, setData] = useState({a: 1})setData((prev) => {return {a: prev.a + 1}})
本文链接地址:https://www.jiuchutong.com/zhishi/290733.html 转载请保留说明!

上一篇:瓦尔加迪纳的日落,意大利南蒂罗尔多洛米蒂山脉 (© Marco Capellari/Getty Images)(瓦尔加德)

下一篇:idea的vue文件中使用ElementUi组件(idea打开vue文件)

  • 特定业务计算的应纳税所得额
  • 企业收到购买标书的增值税专用发票可以抵扣吗?
  • 收到的税费返还应在支付的税费项目中扣除判断题
  • 发票在系统里作用大吗
  • 新政府会计制度衔接预算会计需做好的账目清理工作有
  • 金税盘当月不抵扣如何做分录
  • 由第三方代付款开票给对方合规吗
  • 网上增值税申报表怎么填
  • 城建税计税依据扣除增值税期末留抵
  • 公司转账给法人用途写什么
  • 房屋租赁收入还需要缴纳附加税吗
  • 境外非居民企业所得税
  • 购房补贴退契税3个月没到账
  • 个人借款利息是多少才合法
  • 产权转移数据印花税按次申报?
  • 生产药酒的厂家
  • 购销企业
  • 差额征税的小微企业免税销售额
  • 注册资本变更需要去税务局吗
  • 小额纳税人增值税专用发票税率1%
  • 苹果笔记本如何切换输入法
  • 修改php.ini
  • 劳务公司开具劳务费发票
  • 劳务费和服务费税率一样吗
  • Win10 21H2 Build 21354 ISO 太阳谷官方镜像预览版下载
  • 股东分红个税怎么做账
  • 公司搞活动买的车能买吗
  • php中imagecreatefromjpeg
  • 未确认融资费用报表填在哪个科目
  • 税率变更为13%的文件
  • 基建会计的工作内容
  • redis主从复制如何保证不丢失数据
  • php remote_addr
  • fsck命令详解
  • 软件开发属于技术合同吗
  • 小企业汇兑损失
  • 跨年坏账准备转回
  • 筹办分公司
  • layuitablechecked获取选中数据方式
  • 工费经费计入哪里
  • 代收代缴水费收不上来怎么办
  • 小企业长期债券投资入账价值
  • 自产产品用于业务招待
  • 预收账款退款的会计处理
  • 私车公用费用报销
  • 加盟代理需要什么手续
  • 计提短期借款利息分录
  • 购货方尚未偿付的货款属于什么会计科目
  • 担保公司的担保费能退吗
  • 期末调汇汇兑损益科目
  • 应付利润科目
  • 企业应如何降低消费者
  • 银行打对公回单
  • 垫付的开办费怎么做账
  • 违约合同怎么解决
  • 年末净利润为负数结转本年利润实例
  • sql server字段
  • 怎么用sql脚本创建数据库
  • mysql怎么实现
  • sqlserver字符串切割
  • 华硕主板如何刷系统
  • w3dbsmgr.exe是什么进程
  • sbserv.exe - sbserv是什么进程 有什么用
  • windows10图标显示不出来
  • windows10更新将重启若干次
  • win10 edge浏览器怎样添加信任站点
  • win7系统出现蓝屏重启怎么办
  • 如何显示文件后缀名
  • unity serial number
  • CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
  • node.js基本语法
  • JUnit in android
  • vue js组件
  • nodejs怎么读
  • js date对象构造方法
  • win10下python
  • javascript常用语句
  • 北京天然气收费标准2024年
  • 种子公司缴税吗多少钱
  • 财税库银是什么税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设