位置: 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文件)

  • 金税盘开票系统怎么增加税目
  • 应交消费税的税目
  • 自来水厂会污染水源吗
  • 小规模免税收入账务处理
  • 未确认融资费用和长期应付款
  • 补贴收入企业所得税
  • 网上申报中月平均工资怎么计算
  • 刚成立的外贸公司做小规模纳税人好不好
  • 已认证的进项税额转出如何操作
  • 主营业务收入借方负数表示
  • 发给职工的福利要交个税吗
  • 个人所得税申报成功,会显示什么?
  • 企业房产税优惠政策2022
  • 企业注销未分配利润要交个人所得税吗
  • 平台服务费如何开票
  • 小规模纳税人累计开票多少转一般纳税人
  • 社保可以在税前扣除吗
  • 拿到省级奖有什么用
  • 分公司固定资产转入总公司的分录怎么做?
  • 发票拍照打印出来能用吗
  • 生育津贴计入应付职工薪酬吗
  • 发票过期未认证怎么办
  • 金三接口调用失败怎么办?
  • 4s店以车换车怎么算的
  • 苹果中国区副总裁
  • 公司购车要交哪些税
  • 会计结算要求
  • PHP:xml_set_element_handler()的用法_XML解析器函数
  • win11正式版问题
  • kb4586853更新
  • 信号差的要死
  • 公积金补缴需要去柜台吗
  • vrvarp.exe是什么
  • php image
  • 职工教育经费的列支范围
  • 语音处理算法
  • 结算借款的账务处理办法
  • 只有进项税没有销项
  • 所得税申报表应怎么填
  • 融资租入的办公楼
  • thinkphp框架结构
  • 原财政补助结余对应新账
  • 作废的增值税普通发票怎么处理
  • 营业收入计入销售收入吗
  • 法人股的利弊
  • 购买银行理财产品的几个必须知道
  • 某项目施工成本计划如下图,则5月末
  • 固定资产没有折旧完要转走会计科目
  • 承兑汇票利息分录
  • 购买材料没开票怎么做账
  • 小规模纳税人差旅费可以抵扣吗
  • 网吧出售
  • 外贸企业退税政策
  • 营改增对企业税负影响
  • 影院会计有前景吗
  • 申报系统中印花税报表怎么填
  • 企业注销固定资产清理税务处理
  • sql server 文件
  • win8.1系统安装教程
  • 杭州租房补贴社保断缴影响
  • linux系统故障及解决方法
  • win8系统怎么清理缓存
  • 如何ie8升级到10
  • xp系统的存储在哪里
  • ubuntu14.04挂载硬盘
  • Retina MacBook和10.10.3支持更快的NVMe SSD接口
  • win8怎么隐藏桌面图标
  • WIN10系统打开IE浏览器断网
  • javascript的理解
  • 机械革命系统重装官方教程
  • 创建自己的app外卖平台
  • 批处理在windows中的典型应用
  • Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent错误的记录。
  • jquery怎么修改样式
  • javascript基本语句
  • 长途客运手撕票能不能报销
  • 区域化管理的利与弊
  • 电子税务局房产税原值怎么改
  • 龙华医院怎么网上预约
  • 大专学费减免多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设