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

关于React Hooks中useEffect与useState运行机制的疑问

React useEffect与状态更新触发渲染的疑问解答

你的理解完全正确,核心逻辑就是:React中,useState返回的状态更新函数,只有当传入的新状态值与当前状态值经过浅比较后不相等时,才会触发组件重新渲染。下面结合你的两个示例具体解释:

示例1分析

初始状态loaded为false:

  1. 组件第一次渲染,执行useEffect,打印sumit并发起fetch请求。
  2. fetch请求完成后,调用setLoaded(true),新值true与当前状态false浅比较不相等,触发组件第二次渲染。
  3. 第二次渲染后再次执行useEffect,fetch完成后再次调用setLoaded(true),此时新值true与当前状态true浅比较相等,React不会触发第三次渲染,因此useEffect总共只执行了两次。

示例2分析

初始状态name为sumit:

  1. 组件第一次渲染,执行useEffect,调用setName(Math.random()),Math.random()生成的随机数与当前name的字符串值完全不同,触发第二次渲染。
  2. 第二次渲染后再次执行useEffect,再次调用setName(Math.random()),新生成的随机数又和当前name的随机值不同,再次触发渲染。
  3. 这个过程无限重复,就形成了无限循环。

学习资源推荐

  • React官方文档:重点查看「状态更新的行为」和「useEffect的触发条件」相关内容,官方文档里明确说明了状态更新的浅比较逻辑,聚焦到状态更新的细节部分就能找到对应内容。
  • 《React Hooks 权威指南》:这本书详细拆解了每个Hook的运行机制,包括状态更新与重渲染的关联逻辑,适合系统学习。
  • React官方社区的Hooks讨论帖:很多资深开发者会分享实际场景中的Hook触发问题,能帮你理解更多边界情况。

内容的提问来源于stack exchange,提问作者Sumit Rai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:21:29