位置: 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%减按2%
  • 预缴税款缴多了怎么办
  • 进项交税吗
  • 出口退回的增值税计入哪个会计科目
  • 待摊费用跨年冲销如何入账?
  • 个人持有原始股要交税吗
  • 小规模纳税人季度销售额不超过30万免征
  • 企业所得税营业利润怎么算
  • 个体工商户在税法规定的享有免税优惠的期限内
  • 4800的个人所得税
  • 改扩建要计提折旧吗
  • 公司店铺刷单的收入怎么记账
  • 食堂固定资产管理制度
  • 会计师事务所执业许可和监督管理办法
  • 个人股权转让要交增值税吗
  • 不具备生产条件的生产经营单位
  • session php用法
  • 代办营业执照费用税务编码是多少
  • windows10记事本
  • system 进程
  • win10右键失灵解决办法
  • jquery向下滑动元素
  • php生成随机数字
  • 当月工资个税怎么算
  • 其它应收款的内容
  • 同一控制下企业合并会计准则
  • 科纳克里市
  • navicat的安装
  • 开发成本怎么做分录
  • 机器学习——感知机
  • php cookies
  • 随货赠品会计处理
  • 资产负债率 70%
  • 开票一定要确认发票吗
  • 登记注册车辆登记英语
  • 工会费的会计分录是什么
  • 固定资产的货币资金包括
  • 建筑垃圾处置费 南通
  • 控股股东变更,业务有望质变的公司
  • 应补退税额是什么意思 法律
  • 个人取得劳务报酬个人所得税
  • 企业申报纳税都交什么税
  • 弥补以前年度亏损报表怎么填
  • 为什么要加大研发投入
  • 累计摊销的会计分录有哪些
  • 分公司办事处需要什么手续
  • 小微企业的认定标准2023最新
  • 公交车ic卡网上充值
  • 房地产开发企业销售自行开发的房地产项目
  • 低值易耗品怎么处理
  • 固定资产如何管理可以做到节能减排
  • 资产负债表不平最简单的方法
  • mysql导入导出sql文件
  • fedora安装中文语言包
  • 如何进入opencore引导
  • linux系统讲解
  • centos配置IP地址
  • window 启动
  • xp系统桌面图标大小怎么调整
  • win7系统使用ituns设置iphone铃声图文教程
  • w10系统如何
  • linux开发android好处
  • jquery prototype
  • [置顶]bilinovel
  • jquery 延迟对象
  • jquery json对象
  • Unity3D游戏开发标准教程
  • 收藏一些不常用的图片
  • 企业所得税调整情况说明
  • 南京电费余额查询
  • 电子发票是什么格式的文件
  • 车船税补办
  • 英国税务局缴纳税款方式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设