reactjs - 使用useState多次setState但只触发一次?

标签 reactjs react-hooks use-effect use-state

 import "./styles.css";
 import React, { useState, useEffect } from "react";

 export default function App() {
  const [count, setCount] = useState(0);
   useEffect(() => {
    console.warn("render");
   });
  function btnClick() {
     setCount(count + 1);
     setCount(count + 1);
  }

return (
<div className="App">
  {count}
  <button onClick={btnClick}>Click Me</button>
</div>
);
}

按钮点击只增加1,而不是增加2,也渲染一次。useState有什么具体行为吗?

最佳答案

这是因为两个 setCount 读取相同的值(在单个渲染周期中)并且结果相同的值(实际上, react 将两个更新批处理为单个更新并忽略第二个更新,因为它与第一次更新的输出相同)。

为了保证获得更新的值,请使用带有 setCount 的回调更新程序函数(这些更新也会批量化为单个更新以优化渲染,但会给出正确的增量值 - 这意味着 React 确实会增量首先将该值设置为两倍,然后设置该值以避免两次渲染)。

function btnClick() {
    setCount((prevCount) => prevCount + 1);
    setCount((prevCount) => prevCount + 1);
}

Code Sandbox

关于reactjs - 使用useState多次setState但只触发一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70820008/

相关文章:

javascript - 如何通过钩子(Hook)更新 react 中的对象状态

reactjs - React 原生 setInterval useState

javascript - 无法使用 EventListener 对未安装的组件执行 React 状态更新

error-handling - react Hook 和异步等待: Handling errors with Axios call

reactjs - 即使存在依赖关系,如何运行 useEffect 一次?为什么 ESLint 会提示它?

javascript - <FormControl/> 不接受变体 Prop

react-native - react-navigation:检测屏幕、标签栏何时被激活/出现/聚焦/模糊

javascript - react native : Re-Render Component When Tab is Click

javascript - Webdriver.io 比较运算符

javascript - onClick 在 React 中为父级的父级设置状态?