react中useState的值没有改变,而是旧的数值

这篇具有很好参考价值的文章主要介绍了react中useState的值没有改变,而是旧的数值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题背景

想实现点击按钮就改变数据的效果,但是在控制台的打印结果,总是上一次的修改情况,并不是最新的修改后的数据
react usestate里的数据不是新的,react.js,javascript,前端
代码:

import { useState, useRef } from "react";

// 实现sonA的数据传递给sonB
const SonA = () => {
  const [sonAName, setAName] = useState("");
  const sonARef = useRef(null);
  const changeAName = () => {
    console.log("sonARef.current.value", sonARef.current.value);
    setAName(sonARef.current.value);
    console.log("sonAName:", sonAName);
  };
  return (
    <div>
      <input type="text" ref={sonARef} />
      <button onClick={changeAName}>changeAName</button>
    </div>
  );
};

const SonB = () => {
  return <div>SOnB</div>;
};

const App = () => {
  return (
    <div>
      <SonA> </SonA>
      <SonB></SonB>
    </div>
  );
};

export default App;

原理解释:

在 React 中,useState 是一个异步更新状态的 Hook,因此在调用 setAName 更新状态后,sonAName 并不会立即改变,而是会在下一次渲染时才会更新。

因此,在 console.log("sonAName:", sonAName); 这行代码中,你看到的仍然是更新前的 sonAName 的值。

如果你想在状态更新后立即获取最新的状态值,可以考虑使用 useEffect 来监听状态的变化,然后在回调函数中执行相应的逻辑。

你可以这样修改 SonA 组件:

import React, { useState, useRef, useEffect } from "react";

const SonA = () => {
  const [sonAName, setAName] = useState("");
  const sonARef = useRef(null);

  useEffect(() => {
    console.log("sonAName:", sonAName);
  }, [sonAName]);

  const changeAName = () => {
    console.log("sonARef.current.value", sonARef.current.value);
    setAName(sonARef.current.value);
  };

  return (
    <div>
      <input type="text" ref={sonARef} />
      <button onClick={changeAName}>changeAName</button>
    </div>
  );
};

const SonB = () => {
  return <div>SOnB</div>;
};

const App = () => {
  return (
    <div>
      <SonA />
      <SonB />
    </div>
  );
};

export default App;

这样,在 sonAName 发生变化时,useEffect 就会被触发,你就能够在控制台中看到最新的 sonAName 值了。

页面渲染的数据正常??

react usestate里的数据不是新的,react.js,javascript,前端react usestate里的数据不是新的,react.js,javascript,前端

虽然打印出来的数据总是显示上一次的数据,但是在页面显示的时候是实时更新的,没有延后的问题

原理解释:

这是因为 useState 的更新是异步的,setAName 不会立即改变 sonAName 的值。在 React 中,状态更新是批量处理的,所以在调用 setAName 后,React 并不会立即更新 sonAName 的值。

而在 React 中,组件重新渲染时会获取到最新的状态值,因此当 sonAName 的值在组件重新渲染时已经更新时,页面中显示的 {sonAName} 是最新的值。

而在 changeAName 函数中的 console.log("sonAName:", sonAName); 这行代码中,你看到的是更新前的 sonAName 值,因为 setAName 的更新并没有立即改变 sonAName 的值,而是在下一次渲染时才生效。

如果你想要在状态更新后立即获取最新的状态值,可以考虑使用 useEffect 来监听状态的变化,然后在回调函数中执行相应的逻辑。这样可以确保在状态更新后获取到最新的值。文章来源地址https://www.toymoban.com/news/detail-858330.html

到了这里,关于react中useState的值没有改变,而是旧的数值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React源码解析18(6)------ 实现useState

    在上一篇文章中,我们已经实现了函数组件。同时可以正常通过render进行渲染。 而通过之前的文章,beginWork和completeWork也已经有了基本的架子。现在我们可以去实现useState了。 实现之前,我们要先修改一下我们的index.js文件: 由于我们这一篇并不会实现React的事件机制,所以

    2024年02月13日
    浏览(35)
  • React Hooks的useState、useRef使用

    React Hooks 是 React 16.8 版本引入的新特性,它允许你在不编写 class 的情况下使用 state 和其他 React 特性。其中, useState  和  useRef  是两个常用的 Hooks。 1. useState useState  是一个允许你在函数组件中添加 state 的 Hook。 使用说明: useState  返回一个状态变量和一个设置该变量的函

    2024年02月02日
    浏览(45)
  • React Hook - useState函数的详细解析

    在上一篇文章中, 我用到useState来让大家体验一下hooks函数 那么接下来我们来先研究一下上面核心的一段代码代表什么意思 useState来自react,需要从react中导入,是一个hook函数, 官方中也将它成为State Hook, 它与class组件里面的 this.state 提供的功能完全相同; 一般来说,在函数退出

    2024年01月25日
    浏览(43)
  • react中的useState和useImmer的用法

    react中文官网教程 在函数式组件中,可以使用 useState 这个 Hook 来定义和管理组件的状态。 useState 接受一个初始状态作为参数,并返回一个包含 state 和更新 state 的方法的数组。 下面是一个例子,展示了如何在函数式组件中定义自己的 state: 在上面的例子中,我们使用 useStat

    2024年02月07日
    浏览(43)
  • 02react 函数组件useState的异步问题

    常见的钩子函数:useState、useEffect useState作为最常见的一个hook,在使用中总是会出现各种坑,最明显的就是 useState 更新异步的问题。 问题描述:把接口返回的数据,使用 useState 储存起来,但是当后面去改变这个数据的时候,每次拿到的都是上次的数据,无法实时更新。或者

    2024年02月03日
    浏览(48)
  • react如何处理setState,useState异步问题

    flushSync 是 React 提供的一种实验性的 API,用于控制 React 更新的同步/异步方式,并且只能在 React 16 及更高版本中使用。使用 flushSync 可以强制 React 在执行一些特定的 DOM 操作时,同步地(而非异步地)执行分块更新,从而保证消息优先级和交互响应性能。 通常情况下,React 采

    2024年02月11日
    浏览(46)
  • react中useState、setState、usemeno、meno区别

    useState和setState是异步 useState : useState 是React函数组件中的钩子,用于声明状态变量。 通过 useState ,你可以在函数组件中添加状态,而无需创建类组件。 useState 返回一个数组,其中包含当前状态和一个更新状态的函数 setState : setState 是类组件中用于更新状态的方法。 在类

    2024年02月22日
    浏览(31)
  • react18中,useState 和 useEffect有什么区别

    useState 目的:useState用于在函数组件中添加状态。之前,只有类组件才能有自己的状态,但useState钩子使得函数组件也能够利用React的状态特性。 使用场景:当你需要在组件中存储、读取或更新一些数据时使用。例如,控制输入框的内容、切换按钮的状态等。 工作原理:useS

    2024年02月19日
    浏览(40)
  • react useState useEffect useMemo实际业务场景中的使用

    下面的代码实现了上面图片的功能

    2024年02月16日
    浏览(43)
  • react之Hooks的介绍、useState与useEffect副作用的使用

    Hooks 是 React v16.8 中的新增功能 为函数组件提供状态、生命周期等原本 class 组件中提供的 React 功能 可以理解为通过 Hooks 为函数组件钩入 class 组件的特性 注意:Hooks 只能在函数组件中使用,自此,函数组件成为 React 的新宠儿 可以在项目中同时使用hooks和class 一个 Hook 就是一

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包