React hooks 状态变量在重新渲染后未更新

2024-05-23

在下面的示例中,我有一个想要更新的元素(水果)数组,并使用更新后的数组执行其他操作(在本例中保存更新后的列表)。我的理解是重新渲染状态将更新......但它不在这里......或者状态更新和我的操作之间存在延迟。

In the addFruit功能我可以看到“Peach”立即被添加,但控制台来自saveFruits函数仍然显示状态fruit保持不变。我怎样才能更新它以立即使用。 (我知道在这种情况下我可以通过newFruits变量为saveFruits更新但我需要fruits其他地方也将更新)。

请原谅我,因为这是我关于反应异步状态的第一百万个问题,但还有一些东西不适合我。

const { useState } = React;

function ParentComp() {
    const[fruits, setFruits] = useState(['Apple', 'Orange', 'Banana', 'Pomegranate', 'Kiwi'])


   const addFruit = () => {
      let newFruits = Object.assign([], fruits)
      newFruits.push('Peach')
      setFruits(newFruits)
      saveFruits()
   }
   
   const saveFruits = () => {
      console.log('API req to save fruits.', fruits)
   }

   return (
    <div>
    { fruits.map( (fruit, key) => <div key={key}>{fruit}</div> ) }
      <button type="button" onClick={addFruit}>Add Peach</button>
    </div>
   )
}

ReactDOM.render(<ParentComp />, document.getElementById('root'))
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
  <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

<div id="root"></div>

您可以尝试使用 useEffect ,只要有更新,它就会给出更新的状态。

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

React hooks 状态变量在重新渲染后未更新 的相关文章

随机推荐

  • 使用 JDBC 获取 Oracle 11g 的最后插入 ID

    我是使用 Oracle 的新手 所以我将放弃之前已经回答过的内容这个问题 https stackoverflow com questions 3131064 get id of last inserted record in oracle
  • NTFS 连接与符号链接(对于目录)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 从高层次的角度来看 意味着只关心结果和接口 而不是实现 指向目录的 NTFS 重解析点和指向目录的符号链接之间的行为 如果有的话 有什么区别 同一目录
  • Python - 测试抽象基类

    我正在寻找测试抽象基类中定义的方法的方法 最佳实践 我能直接想到的一件事是对基类的所有具体子类执行测试 但有时这似乎有些过分 考虑这个例子 import abc class Abstract object metaclass abc ABC
  • Visual Studio 2010 的“线程”窗口中的 和 [Thread Destroyed] 详细信息

    我一直在尝试调试与一个应用程序的线程相关的一些问题 当我附加到应用程序时 我看到一个像这样的窗口 这个名为 Thread Destroyed 的线程是什么 应用程序代码肯定不会写这个名称 这意味着线程的调用堆栈不可用 采集引擎 线程在应用程
  • Javascript 闭包 - 变量范围问题

    我正在阅读 Mozilla 开发者网站上有关闭包的内容 我注意到在他们的常见错误示例中 他们有以下代码 p Helpful notes will appear here p p E mail p
  • 在 gui 中更新 matplotlib 图的有效方法?

    我的应用程序以大约 30fps 的速度通过网络接收数据 并且需要根据这些新数据动态更新水平条形图 为此 我在 tkinter 窗口内使用 matplotlib 图 对我的代码进行分析表明 我的代码中的主要瓶颈是该图的更新 下面给出了代码的简
  • NoInitialContextException:heroku 战争部署

    我一直在开发一个 J2EE 项目 并且在其中使用连接池 也通过部署在 heroku 上的数据库进行访问 我使用以下代码来设置 Connection 对象 Context initContext new InitialContext Cont
  • 使用 WebClient 在 PowerShell 脚本中将 FTP 从二进制更改为 ascii

    简单的 PowerShell 脚本 它可以毫无问题地下载文件 二进制 我需要它的ascii 格式 File c temp ftpfile txt ftp ftp myusername email protected cdn cgi l em
  • CSS 样式在部分回发时停止工作

    在 ASP net C 应用程序中 我有一个带有自定义 css 的复选框 CSS 文件是 复选框
  • 在node.js 0.12.x中使用libuv函数

    我写了一个node js c 插件 在node js 0 10 x下可以成功编译 但是当迁移到0 12 x时 出现了一些错误 例如error C2065 uv work t undeclared identifier 我想知道我是否可以在0
  • 如何在 IE 中启用开发者工具始终开启

    如何在 IE 中始终启用开发人员工具 每次我设置启用开发人员工具 通过菜单或按 F12 时 以前的设置 例如网络捕获 分析器打开 都会重置为默认值 但 Firebug 的情况并非如此 是否有任何注册表设置可以始终启用 IE9 IE10 中的
  • INotifyPropertyChanged 和线程

    我有一个基类实现INotifyPropertyChanged protected void OnNotifyChanged string pName if PropertyChanged null PropertyChanged this
  • 设置 Wpf 饼图样式

    这是我的饼图 xaml
  • 验证服务是否被标记为删除

    有时 当我卸载安装程序 使用 WIX 创建的 时 服务仍标记为删除 用户必须重新启动计算机才能再次安装 我如何验证该服务是否已标记为删除并告诉用户在进行其他安装之前重新启动计算机 一般来说 当某项服务仍然锁定在该服务上 从而阻止 Windo
  • 使用 PHP 更新 XML 节点

    我有一个 XML 文件 test xml
  • 如何在android中显示对话框之外的图像?

    我试图在对话框片段的顶部显示配置文件图像 一半在图像之外 我在下面附加了示例对话框 就像那样 并尝试了旧 Stackoverflow 解决方案中的所有 FrameLayout 协作 但我无法存档此内容 请给我正确的解决方案 谢谢 Updat
  • R:适合显示具有倾斜计数的数据的图

    我有这样的数据 Name Count Object1 110 Object2 111 Object3 95 Object4 40 Object2000 1 因此 只有前 3 个物体的计数较高 其余 1996 个物体的数量少于 40 个 其中
  • Typescript:具有排除更改属性修饰符的映射类型

    当使用 Minus 映射类型时 它似乎从属性中删除修饰符 我认为这是由排除类型引起的 但我不确定为什么 我期望 Minus 只从 T 中删除 U 的键 而不更改 T 的属性修饰符 type Minus
  • Python正则表达式检查字符串是否包含任何单词

    我想搜索一个字符串并查看它是否包含以下任何单词 AB AG AS Ltd KB University 我在 javascript 中工作 var str Hello test AB var forbiddenwords new RegExp
  • React hooks 状态变量在重新渲染后未更新

    在下面的示例中 我有一个想要更新的元素 水果 数组 并使用更新后的数组执行其他操作 在本例中保存更新后的列表 我的理解是重新渲染状态将更新 但它不在这里 或者状态更新和我的操作之间存在延迟 In the addFruit功能我可以看到 Pe