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

为何React组件每次渲染时useState变量都会被初始化?

问题根本原因

你遇到的核心问题是函数组件的执行机制:每次组件渲染时,整个TestComponent函数体都会从头到尾执行一遍。

在你的代码里,useState(testData())是直接调用了testData(),把它的返回值传给useState。虽然React的useState只会在组件首次挂载时使用这个初始值,后续渲染会忽略这个参数,但因为每次渲染都会执行函数体里的代码,所以testData()会被反复调用,导致控制台每次都输出日志。

简单说:你传的是testData()(函数执行后的结果),而不是让React在需要的时候才去调用testData。

解决方法

把useState的参数改成惰性初始化函数——也就是传递一个返回初始值的无参函数,React只会在组件首次挂载时执行这个函数来获取初始值,后续渲染不会再执行:

const [data, setData] = useState<number[]>(() => testData());

这样修改后,testData()只会在组件第一次渲染时被调用一次,后续counter变化导致的渲染不会再触发它。

关于useCallback的误区

你之前尝试用useCallback包裹testData是找错了方向:

  • useCallback是用来在组件多次渲染中缓存函数引用的,而且必须在组件内部使用(不能在顶层),但你的问题根本不是函数引用的缓存问题,而是初始化时机的问题。
  • 就算把testData用useCallback包起来,如果还是直接调用testData()传给useState,照样会每次渲染都执行,因为调用操作本身在函数体里,每次渲染都会走一遍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:15:38