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

  • dvr4000用户密码(dvr4000)(dvr初始密码)

    dvr4000用户密码(dvr4000)(dvr初始密码)

  • 邮政寄信怎么查到哪里了(邮政寄信怎么查询进度)

    邮政寄信怎么查到哪里了(邮政寄信怎么查询进度)

  • qq语音气泡在哪里设置的(qq语音气泡怎么设置方法)

    qq语音气泡在哪里设置的(qq语音气泡怎么设置方法)

  • 如何制作手机主题(如何制作手机主题赚钱)

    如何制作手机主题(如何制作手机主题赚钱)

  • 微信如何发超过5分钟的视频(微信如何发超过200的红包)

    微信如何发超过5分钟的视频(微信如何发超过200的红包)

  • qq冻结七天可以马上解封吗(qq冻结七天可以注销吗)

    qq冻结七天可以马上解封吗(qq冻结七天可以注销吗)

  • 华为怎么取消主题(华为怎么取消主题的屏保)

    华为怎么取消主题(华为怎么取消主题的屏保)

  • 抖音小程序怎么申请??(抖音小程序怎么删除游戏)

    抖音小程序怎么申请??(抖音小程序怎么删除游戏)

  • realmex50是什么牌子(realmex50是什么手机)

    realmex50是什么牌子(realmex50是什么手机)

  • 定时器有哪三种类型(定时器有哪三种分辨率)

    定时器有哪三种类型(定时器有哪三种分辨率)

  • 小米手机摔了一下黑屏了怎么办(小米手机摔了一下电池1%)

    小米手机摔了一下黑屏了怎么办(小米手机摔了一下电池1%)

  • a1474是ipad几(a1474是ipad几代 什么处理器)

    a1474是ipad几(a1474是ipad几代 什么处理器)

  • 手机摔过之后频繁重启(手机摔过之后一直重启)

    手机摔过之后频繁重启(手机摔过之后一直重启)

  • 微信腾讯翻译怎么设置(打开腾讯翻译器)

    微信腾讯翻译怎么设置(打开腾讯翻译器)

  • 微型计算机主要功能是进行(微型计算机主要包括哪些)

    微型计算机主要功能是进行(微型计算机主要包括哪些)

  • i7 6700是几核处理器(i7 6700核显相当于什么显卡)

    i7 6700是几核处理器(i7 6700核显相当于什么显卡)

  • 华为watch2和gt2的区别(华为watch 2跟gt2)

    华为watch2和gt2的区别(华为watch 2跟gt2)

  • macbook air如何删除程序(macbook air如何删除用户)

    macbook air如何删除程序(macbook air如何删除用户)

  • 微信出行历史怎么看(微信里面出行历史)

    微信出行历史怎么看(微信里面出行历史)

  • vivo手机都有防水吗(vivo有没有防窥探)

    vivo手机都有防水吗(vivo有没有防窥探)

  • 爱天使电话手表怎么取卡出来(爱天使电话手表官网)

    爱天使电话手表怎么取卡出来(爱天使电话手表官网)

  • 为什么充电宝充不进去电(为什么充电宝充满了又变成0了)

    为什么充电宝充不进去电(为什么充电宝充满了又变成0了)

  • 美团民宿砍价返现怎么领取(美团民宿平价返现)

    美团民宿砍价返现怎么领取(美团民宿平价返现)

  • xr副卡支持4g吗(iphonexr副卡能接电话吗)

    xr副卡支持4g吗(iphonexr副卡能接电话吗)

  • 桂林扫码乘车怎么使用(在桂林坐公车怎么刷二维码)

    桂林扫码乘车怎么使用(在桂林坐公车怎么刷二维码)

  • 幽鹤国家公园的翡翠湖, 加拿大不列颠哥伦比亚省 (© Cavan Images/Offset)(斯卡伊保安公司怎么样)

    幽鹤国家公园的翡翠湖, 加拿大不列颠哥伦比亚省 (© Cavan Images/Offset)(斯卡伊保安公司怎么样)

  • 如何办理车辆购置置换补贴手续
  • 运输行业一般纳税人税率
  • 主营业务收入为什么记贷方
  • 劳务派遣怎么做起来
  • 房地产公司解散条件
  • 行政事业单位盘亏或毁损的固定资产
  • 股份支付费用的会计处理怎么做?
  • 未开票确认收入分录怎么做
  • 建筑业异地预缴税款的会计分录
  • 关于纳税人取得的发票
  • 小规模季报财务报表只看季度最后一个月的数据可以吗
  • 耕地占用税和契税什么时候交
  • 股份利润怎么分
  • 汇算清缴报错了怎么更正
  • 无票收入如何抵税
  • 管理费用职工福利费
  • 商业企业做设备维修收入会计分录
  • 外企投资应该怎么投资
  • 小微企业行业划分标准 工信部
  • 没收到电费账单怎么办
  • 房地产销售代理是什么意思
  • 个人所得税计提和发放分录
  • 私营公司股权转让
  • php读取excel内容
  • 生产成本结转后有余额吗
  • gridviewcolumn
  • 狗能看懂的电视
  • win10日历点不开
  • php ajax
  • 用谷歌浏览
  • php批量删除文件
  • dhcp命令行
  • elementui的表格
  • 关于印花税免税的规定
  • 转账有手续费没有
  • 购销合同印花税税率
  • 合伙 利润分配
  • 工程发票需要备注吗
  • mysql随机密码怎么看
  • 消防器材费用
  • 公司注销章子要盖章吗
  • 纳税调整调减有哪些
  • 用友软件接口
  • 搬迁补偿款的会计分录
  • 运费增值税发票抵扣
  • 银行三证合一是哪三证
  • 公司股权作价转让会计分录案例
  • 非本公司员工的火车票可以报销么
  • 高速过路费抵扣增值税
  • 加油充值卡有优惠吗
  • 工程总包含设备工程吗
  • 含运费的原材料会计分录
  • 原材料结转下年怎么记
  • 收入可以直接转成本吗?
  • 记账凭证先写借方还是贷方
  • 银行开户存款流程
  • 2008sql附加数据库
  • windows补丁是什么
  • xp系统一直在启动界面怎么办
  • windows server 2016 域控
  • ubuntu下安装deb文件
  • fsa是什么文件格式
  • 升级win10系统后电脑变卡处理方法
  • win10驱动备份在哪里
  • Windows7如何查看电脑配置
  • linux使用curl进行接口测试
  • win10系统中怎么设置搜狗输入
  • linux ssh key登录
  • Unity3D游戏开发pdf
  • vs2019怎么用gets
  • div+css布局的步骤
  • jquery easyui 教程
  • python3正则
  • 手机糖果游戏娱乐
  • JavaScript中的数据类型
  • python 面向对象 类
  • 捐赠纳税
  • 广东个体户年报微信申报
  • 开票时间超时怎么办
  • 什么是印花税,印花税有哪些特点
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设