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

为何调用useState的setTest后,scrollY滚动时可持续打印,不调用则仅打印一次?

问题解答

核心原因在于React组件的重新渲染触发机制,咱们一步步拆解:

1. 调用setTest(scrollY)时的情况

  • 每次页面滚动,handleScroll会被触发,调用setTest(scrollY)更新test状态。
  • React中,状态更新会强制组件触发重新渲染。
  • 组件每次重新渲染时,return语句里的console.log(scrollY)都会执行一次,而此时的scrollY是当前滚动位置的最新值,所以你能看到每次滚动都打印新的数值。

2. 不调用setTest(scrollY)时的情况

  • 页面滚动时,handleScroll依然会被触发,但没有更新任何组件状态。
  • 组件只有在初始挂载和状态/ props变化时才会重新渲染,这里没有状态更新,所以组件只会在最开始渲染一次,console.log(scrollY)也就只执行一次——哪怕滚动事件一直在触发,组件不重新渲染,这段代码就不会再跑。

补充说明

  • 你代码里的useEffect依赖是空数组[],所以事件监听只会在组件挂载时绑定一次,卸载时移除,这个逻辑没问题。
  • 另外,return里直接写{console.log(scrollY)}其实是把console.log的返回值(undefined)作为JSX元素渲染,虽然能打印,但这不是规范写法,建议调试时把console.log放在组件顶层或者useEffect里,避免不必要的渲染执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:14