React hooks 不能拿到最新的的setState的值

2023-11-08

在class中,如果 我们想要拿到setState 最新的值,去调用api,直接通过this.setState的回调函数就可以了

this.setState({
	latestValue: "我是最新的"
},()=>{
	this.callApi(latestValue);   //这里就会拿到最新的值
});

然后我们在react hooks中setState 确实拿到上一次的缓存,是因为,函数在每次渲染时也是独立的。这就是 Capture Value 特性,后面遇到这种情况就不会一一展开,只描述为 “此处拥有 Capture Value 特性”。

const [modelStatus, setModelStatus] =useState("");

function statusHandleChange(val) {
        setModelStatus(val);
        search();
    }

function search() {
    
	console.log(modelStatus);   // 这里拿到的值 是上一次的值,不是最新的
	props.callApi(modelStatus);
}

解决方法是:
第一种:

function statusHandleChange(val) {
        setModelStatus(val);
        // 直接把参数的值 传进去 拿到的就是最新的了
        search(val);
    }

function search(value) {
    
	console.log(value);  
	props.callApi(value);
}

第二种方法:

const [modelStatus, setModelStatus] =useState("");
const modelStatusRef = useRef(null);

useEffect(()=>{
	// 每次 更新 把值 复制给 modelStatusRef
	modelStatusRef.current = modelStatus;
}, [modelStatus]); // 依赖的值 等modelStatus 改变了 才出发里面的值

function statusHandleChange(val) {
        setModelStatus(val);
        
        // **设置一个延迟 0毫秒,这个 很重要**
        setTimeout(search, 0);
    }

function search(value) {
	// 这里的值 就是 拿到最新的值了
    let _modelStatus = modelStatusRef .current;
	console.log(_modelStatus );  
	props.callApi(_modelStatus );
}

第三种方法: (其实第三种方法跟第二种方法差别不大)

  useEffect(()=>{
           setModelStatus(modelStatus);
   },[modelStatus]);

如果有什么问题,欢迎评论区指出,大家一起进步,谢谢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React hooks 不能拿到最新的的setState的值 的相关文章

  • Hydrate with RTK Query 确实会抛出错误

    我有一个非常简单的组件来显示来自本地 API 的数据 使用 Nextjs API 路由制作 我使用 RTK 查询来获取数据 const api createApi reducerPath data baseQuery fetchBaseQu
  • 在 createAsyncThunk 上调度操作?

    我有一个 thunk 动作是由createAsyncThunk 我想在调用 api 更新状态之前调度一个操作 我不想使用动作getProducts pending因为我想要派遣actionLoading 对于其他 thunk 操作 我怎样才
  • React TypeError:x 不是函数

    我在子组件中从父组件调用函数 booksRefresh 但出现错误 类型错误 booksRefresh 不是函数 我不知道为什么 因为 booksRefresh 是一个函数 有人可以帮我解释为什么会出现这个错误吗 这是我的代码 import
  • 在 React JSX 中返回配对元素

    问题 在 React 中 您希望通过映射数组来创建 DOM 结构 但数组中的每个项目应返回 2 个元素 例如 import React from react import from lodash let Component React ex
  • 如何为React hooks(useState等)做流类型注解?

    我们应该如何将 Flow 类型注释与 React hooks 一起使用 例如useState 我尝试寻找一些如何实施它们的示例 但找不到任何东西 我试过这个 const allResultsVisible setAllResultsVisi
  • 我可以关闭 create-react-app 分块机制吗?

    我正在使用以下命令设置我的 React 应用程序项目create react app 我想知道是否有一种方法可以关闭内置于反应脚本中的分块机制 问题是我需要修复在构建中创建的包的名称 可以通过扩展您的 CRA 来完成react app re
  • 如何判断网站是否使用 next.js?

    很容易判断一个网站是否使用 ReactJS 通过使用反应开发者工具 https chrome google com webstore detail react developer tools fmkadmapgofadopljbjfkapd
  • 如何在单击按钮时清除反应挂钩中的间隔

    我正在用反应钩子构建一个简单的计时器 我有两个按钮启动和重置 当我单击开始按钮时 handleStart 函数工作正常 计时器启动 但我不知道如何在单击重置按钮时重置计时器 这是我的代码 const App gt const timer s
  • WebpackError:ReferenceError:Gatsby 上未定义窗口

    我已经在互联网上进行了大量搜索 但无法解决这个问题 我正在使用 Gasby 开发静态页面 但遇到此错误 WebpackError ReferenceError window is not defined 我的线索是 这与我正在使用的引导 模
  • React Uncaught TypeError:this.state.messages.map 不是一个函数

    我正在开发一个 React 应用程序 并且遇到了此映射函数的问题 render const messages this state messages map message gt return li message text li retu
  • 与 useEffect 一起使用时如何防止 useCallback 触发(并遵守 eslint-plugin-react-hooks)?

    我有一个用例 页面必须在第一次渲染和单击按钮时调用相同的获取函数 代码类似于以下内容 参考 https stackblitz com edit stackoverflow question bink 62951987 file index
  • 如何直接调用回调来修复 React 类组件中的“this”?

    我想了解当 JSX 中调用函数作为事件处理程序的回调时 this 的值是如何设置的 我注意到 当我直接调用它时 访问状态没有问题 而不会出现著名的未定义的 this 错误 如下所示 import React from react class
  • Webpack 如何构建生产代码以及如何使用它

    我对 webpack 很陌生 我发现在生产构建中我们可以减少整体代码的大小 目前 webpack 构建的文件大小约为 8MB main js 的文件大小约为 5MB 如何减少生产构建中的代码大小 我从互联网上找到了一个示例 webpack
  • 如何将react-alert与定义为ES6类的React组件一起使用

    我正在尝试使用https www npmjs com package react alert https www npmjs com package react alert在我的项目中 但是为声明为函数的 React 组件提供了示例 但我的
  • 退出动画在下一个 js 帧器运动中不起作用?

    我在我的应用程序中使用 next js 在我的动画中使用成帧器运动 我可以设置介绍动画 但退出动画根本不起作用 我已将代码包装在动画效果下 但它没有执行任何操作 我在这里缺少什么 下面是我的示例代码
  • 如何在 React 应用程序中访问浏览器 cookie

    这个问题有点受欢迎 但我没有这么幸运 我主要是一名后端人员 所以我一边工作一边学习 我有一个名为connect sid和价值12345 我在 chrome 开发工具中看到了这一点 在我的反应应用程序中 我控制台记录了document coo
  • 我想在使用 Jest Snapshots 时获得图像文件名/路径

    我已经开始使用Jest https facebook github io jest 在一个新项目中有很多 我现在正在使用Snapshot https facebook github io jest docs tutorial react h
  • RouteComponentProps 与 useHistory

    使用React功能组件和Typescript 使用useHistory钩子与RouteComponentProps react router v5 1 之间有什么区别吗 使用 RouteComponentProps 的示例 import R
  • TinyMCE 输入以相反顺序写入

    我面临这个问题 每当我输入 TinyMCE 时 我的光标会自动向左移动 最终从右向左写入文本 它只发生在我部署的应用程序中 但如果我在我的机器上本地运行代码 同样可以正常工作 发生这种情况的任何可能原因 相同的屏幕截图 https i st
  • ReactJS 模式无法使用 Materialise css 打开

    我是 ReactJS 的新手 正在学习使用 Materialise css 创建模型 https materializecss com https materializecss com import React Component from

随机推荐

  • QT 控件重绘

    前言 转载请附上连接 本帖原创请勿照抄 QT重绘控件是指通过实现控件头文件 使用QSS或者样式表来对某个控件进行重新绘制 1 重绘QButton按钮 2 重绘QComboBox下拉框 3 其它控件重绘的办法 1 重绘QButton 重绘控件
  • 竞赛选题 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

    文章目录 0 简介 1 二维码检测 2 算法实现流程 3 特征提取 4 特征分类 5 后处理 6 代码实现 5 最后 0 简介 优质竞赛项目系列 今天要分享的是 基于机器学习的二维码识别检测 opencv 二维码 识别检测 机器视觉 该项目
  • 深度学习手记(七)之MNIST实现CNN模型

    手写字体识别是一个很好练习CNN框架搭建的数据集 下面简单讲述一下整个模型构建的思路 整个模型通过两次卷积 两次亚采样以及两次全连接层 整个结构比较简单 也易理解 其中 两次卷积层的大小都为5x5 过滤器分别为32和64个 为了不改变图片的
  • 【Docker】Docker 如何在容器内安装vi命令(vi不能使用)

    文章目录 1 背景 1 背景 mac下安装了docker 然后用docker 安装了grafana软件 然后进入grafana base lcc lcc prometheus docker exec it 4b5f517f4340 bash
  • 火车进站

    import java util 火车进站 1 先求出所有可能的出栈序列 不一定合法 2 判断出栈序列是否合法 3 对合法的出栈序列进行排序后输出 public class solution private static List
  • 密码学哈希函数

    哈希函数H使用变长数据分组M作为输入 生成定长结果h H M 这一结果也称哈希值 哈希码或散列值 好的哈希函数的特点如下 对大输入集合使用该函数时 输出是均匀分布的且是明显随机的 概括的说 哈希函数的主要目标是保证数据的完整性 在安全应用中
  • Visual Studio 2019 Community 版离线注册

    本文主要参考 https blog csdn net songfuliang2011 article details 102486451 Visual Studio 2019 Community 虽然是免费使用 但必须在线注册一个账号 否则
  • Spring Boot 事务详解

    自己学习事务做的笔记 方便记忆和复习 1 事务是为了解决数据安全问题而存在的 最经典的例子就是银行转账问题 A账户给B账户转账100元 A账户扣除100元后由于不可抗力因素导致程序中断 B账户没有收到那100元 A账户那100元凭空消失 肯
  • Ubuntu IDEA安装和配置以及eclipse下载

    Idea2022版本官网下载 https www jetbrains com idea download section linux sudo tar zxvf ideaIU 2022 3 3 tar gz C usr local sudo
  • 闲鱼玩法平台系列文章——双11实操篇

    背景 营销玩法是电商行业进行商品促销和用户增长的重要手段 上一篇中介绍了闲鱼的玩法平台 多啦A梦 本篇将介绍在该系统上承接的玩法 闲鱼作为闲置循环工厂也参与了大促 为了让更多闲置在闲鱼游起来 在商品侧设计了 转卖抽奖 活动玩法 为了能让更多
  • asoc 如何定义各种widget、route

    上一节中 介绍了DAPM框架中几个重要的数据结构 snd soc dapm widget snd soc dapm path snd soc dapm route 其中snd soc dapm path无需我们自己定义 它会在注册snd s
  • 大数据治理——《华为数据之道》

    重点章节 1 差异化的数据分类管理 第二章 信息架构 第三章 数据底座 第三章 次重点 2 数据服务 第四章 数据质量 第五章 数据安全与隐私 第六章 其他 3 数据感知 第五章 数据综合治理体系 第二章 企业数字化转型 第三章 重要概念和
  • 【自用】西门子s7-200连接显示屏和物联网盒子完整配置过程

    总览 1 PLC配置 2 显示屏配置 3 物联网盒子配置 一 PLC配置 1 连接PLC软件 STEP 7MicroWIN V4 0 SP9完整版 链接 https pan baidu com s 17LMEXnbkQZMPI8Bte24E
  • 使用单片机控制600W升压模块输出电压

    要想用单片机控制升降压模块的输出电压 首先想到的就是使用电信号控制FB电阻大小 原理上数字电位器可以满足这个需求 那么问题就在于 如何评估数字电位器大小 如何知道FB电阻和输出电压的关系 如果是集成DCDC变换器模块比较简单 一块板上没几个
  • QT 消息对话框按钮显示

    前言 搞QT嘛 大多数都是军工 都要国产化 而且消息对话框的按钮的英文也不是很得劲 所以需要汉化 使用静态函数的按钮就是显示英文 汉化的代码如下 void Widget on pushButton clicked QMessageBox b
  • python selenium 获取frame中的元素

    版权声明 本文为徐代龙原创文章 未经徐代龙允许不得转载 https blog csdn net xudailong blog 使用情景 在很多的视频播放网站 视频播放页面往往获取不到iframe里面的内容 也或者是模拟登陆的时候 会跳入一个
  • 标量、向量、矩阵之间求导笔记

    2019 12 06 今天 碰到了下面有关向量对于向量的导数 不太明白为什么最后得到的是A的转置 d A x
  • 区块链Fabric 排序、二次开发

    1 排序 Orderer 排序 Orderer 指对区块链网络中不同通道产生的交易进行排序 并广播给节点 Peer 排序 Orderer 是以可插拔组件的方式实现 目前分为SOLO和Kafka两种类型 SOLO 仅有一个Orderer服务节
  • React 状态管理器,我是这样选的

    前言 我们的前端团队在一直深度使用 React 从最早的 CRA 到后来切换到 umijs 从 1 x 2 x 3 x 再到现在的 4 x 其中有一点不变的 就是我们一直在使用基于 react redux 思想的 dva 作为状态管理工具
  • React hooks 不能拿到最新的的setState的值

    在class中 如果 我们想要拿到setState 最新的值 去调用api 直接通过this setState的回调函数就可以了 this setState latestValue 我是最新的 gt this callApi latestV