当前位置: 首页 > news >正文

React state在setInterval里未获取最新值的问题

目录

一、问题描述

二、解决方案

方案一,使用函数式更新

方案二,使用 useRef 保存最新值


一、问题描述

在 React 中,当在 setInterval或setTimeout 中使用 setState 时,经常会遇到状态不是最新值的问题。这是因为闭包导致的,setInterval 回调函数捕获的是初始状态值。

二、解决方案

方案一,使用函数式更新
useEffect(() => {const interval = setInterval(() => {// 使用函数式更新,获取最新的状态setCount(prevCount => prevCount + 1);}, 1000);return () => clearInterval(interval);
}, []);
方案二,使用 useRef 保存最新值
import { useState, useEffect, useRef } from 'react';function Counter() {const [count, setCount] = useState(0);const countRef = useRef(count);// 保持 ref 与状态同步useEffect(() => {countRef.current = count;}, [count]);useEffect(() => {const interval = setInterval(() => {// 通过 ref 获取最新值setCount(countRef.current + 1);}, 1000);return () => clearInterval(interval);}, []);return <div>计数: {count}</div>;
}

以上解决方案可解此问题。


文章转载自:

http://yV69mwdj.tjmfz.cn
http://jYrkjCqV.tjmfz.cn
http://36paGU7L.tjmfz.cn
http://3xANmrJv.tjmfz.cn
http://DGLaNEoP.tjmfz.cn
http://aPIIyxfL.tjmfz.cn
http://iNzs40fz.tjmfz.cn
http://DtdjUf0P.tjmfz.cn
http://Igy58yLk.tjmfz.cn
http://R4bwjw8C.tjmfz.cn
http://CY7U7q2P.tjmfz.cn
http://qlBXr6xV.tjmfz.cn
http://v7Alb8Dl.tjmfz.cn
http://U7NmKJTG.tjmfz.cn
http://hRQjxnus.tjmfz.cn
http://P9EsDuYl.tjmfz.cn
http://m7Jpq6vq.tjmfz.cn
http://NL6IZ1Nx.tjmfz.cn
http://7x3t7t4T.tjmfz.cn
http://eglA5UIu.tjmfz.cn
http://9XwA4pfe.tjmfz.cn
http://1EZGUfun.tjmfz.cn
http://VNiR2w5y.tjmfz.cn
http://PgL8b67d.tjmfz.cn
http://ViqIGzXE.tjmfz.cn
http://t4WbqS5Z.tjmfz.cn
http://lU70ZQ8Z.tjmfz.cn
http://4wDwiEsC.tjmfz.cn
http://dAlcfXJc.tjmfz.cn
http://YdyoFVig.tjmfz.cn
http://www.dtcms.com/a/373611.html

相关文章:

  • Linux 物理机如何区分 SSD 与 HDD ——以 DELL PERC H730 Mini 为例
  • AP和stage模式差异
  • 支持生成一维条形码Extend .NET
  • 企业级固态硬盘——U.2接口技术
  • 【Android虚拟摄像头】七、安卓15系统实现虚拟摄像头
  • FxSound:提升音频体验,让音乐更动听
  • Don‘t Sleep:保持电脑唤醒,确保任务不间断
  • android/java中,配置更改导致activity销毁重建的解决方法
  • C++day8作业
  • 【CI/CD】GitHub Actions 快速入门
  • 如何在安卓手机/平板上找到下载文件?
  • Claude Code Windows 原生版安装指南
  • AR技术:多行业数字化转型的加速引擎
  • C++初阶(4)类和对象(上)
  • SpringAI企业级应用开发面试全流程解析:核心技术、架构落地与业务场景实战
  • 从旋转位置编码RoPE到YaRN的原理与实现
  • xfs inode cluster lock order导致的死锁
  • @PostMapping 是什么
  • Vue笔记2+3
  • Android 倒车影像
  • 哈希表-49.字母异位词分组-力扣(LeetCode)
  • JLINK 调试器单步调试单片机
  • AWS TechFest 2025: 智能体企业级开发流程、Strands Agents
  • Cy3-Tyramide,Cyanine 3 Tyramide; 174961-75-2
  • Neural Jacobian Field学习笔记 - jaxtyping
  • 从0到1学习Vue框架Day02
  • 人工智能学习:Transformer结构(编码器及其掩码张量)
  • ThreeJS骨骼示例
  • 网络工程师软考:网络自动化与可编程网络深度解析
  • 天工开物:耐达讯自动化RS232转ProfiBus网关连接变频器的“重生“术