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

Gatsby中用Hooks按视口大小赋值出现Hook调用报错如何解决?

错误根源

你尝试的三元运算、if判断写法本质还是条件调用Hook:当第一个useMediaQuery返回结果为真时,第二个useMediaQuery不会被执行,导致不同渲染周期的Hook调用数量不一致,触发报错。

Rendered fewer hooks than expected. This may be caused by an accidental early return statement

正确解决方案

按照React Hook规则,先在组件顶层无条件调用所有需要用到的useMediaQuery,拿到所有媒体查询的匹配结果后,再通过条件逻辑给filter赋值,保证每次渲染的Hook调用数量完全固定。
正确代码示例:

// 组件顶层无条件调用所有Hook,和后续逻辑完全解耦
const isSmallScreen = useMediaQuery({ query: '(max-width: 695px)' })
const isLargeScreen = useMediaQuery({ query: '(min-width: 900px)' })

// 后续再做变量赋值逻辑
let filter
if (isSmallScreen) {
  filter = 2
} else if (isLargeScreen) {
  filter = 4
} else {
  filter = 3
}

也可以用三元运算简化写法,只要提前完成所有Hook调用即可:

const filter = isSmallScreen ? 2 : isLargeScreen ? 4 : 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:02