You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置相同State值后React组件重渲染异常原因咨询

React setState 重复设置相同值时的重渲染问题

先看对应的组件代码:

import { useState } from "react";

export default function App() {
  const [buttonClicked, setButtonClicked] = useState(false);

  console.log('Render');

  return (
    <div className="App">
      <button onClick={() => setButtonClicked(true)}>Click me</button>
      {buttonClicked && <div>Button was clicked</div>}
    </div>
  );
}

你观察到的现象是:非StrictMode下,初始渲染打印1次Render;第一次点击按钮(将state设为true)触发重渲染,打印第2次;第二次点击按钮(仍设为true)居然也触发重渲染,打印第3次;第三次及之后点击则不再触发。

原因解释

React确实会通过对比新老state值来决定是否跳过重渲染,但这个判断逻辑并非在所有场景下都会立刻生效:

  • 第一次点击按钮时,state从false变为true,值发生明确变化,必然触发重渲染。
  • 第二次点击时,你传入的新值和当前state值相同,但此时React会先启动一次渲染流程,在渲染过程中才会确认state没有变化。这次渲染结束后,React会记住这个状态的"稳定"值,后续再调用相同值的setState时,就会直接跳过重渲染——这就是第三次及之后点击不再触发的原因。
  • 这种"额外"的渲染是React内部优化机制的过渡阶段,目的是确保状态处理的一致性,避免过早跳过渲染导致潜在问题。

简单来说:React对于相同值的state更新,不会在第一次重复调用时就直接跳过,而是会先执行一次渲染确认,之后才会应用跳过逻辑。

内容的提问来源于stack exchange,提问作者Filip Mamcarczyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 21:09:54