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

React Hooks新手求助:条件渲染函数组件时出现Rendered fewer hooks than expected报错

解决React Hooks报错:Rendered fewer hooks than expected

嘿,我刚踩过这个一模一样的坑!你的问题其实是React Hooks最核心的规则之一——hooks必须在组件的顶层按固定顺序调用,绝对不能在条件判断、循环或者嵌套逻辑里调用(包括像你这样条件性地直接调用其他组件函数)。

我来给你拆解下问题出在哪:你现在是直接写Page1()、Page2()这种组件函数调用,比如{ page === "Page1" && Page1() }。这种写法会让React把Page1内部的hooks(哪怕你现在没写,以后加了也会出问题)当成MyComponent自己的hooks来处理。当page从空切换到"Page1"时,MyComponent的hooks数量突然变多了;要是之后切回空状态,hooks数量又骤减,完全违反了React对hooks调用顺序和数量的严格要求,所以才会抛出那个报错。

正确的写法:用JSX元素渲染组件

你只需要把直接调用组件函数的方式改成JSX标签形式,也就是<Page1 />而不是Page1()。React会把每个JSX组件当成独立的实例处理,它们内部的hooks会被单独追踪,不会干扰父组件的hooks调用逻辑。

修改后的代码如下:

export const MyComponent= () => { 
  const [page, setPage] = useState(""); // 小提示:React里状态更新函数一般用小驼峰命名,比如setPage而非SetPage,这是社区通用规范~
  return ( 
    <div> 
      { page === "" && (
        <> 
          <div onClick={() => setPage("Page1")}>Show Page 1</div> 
          <div onClick={() => setPage("Page2")}>Show Page 2</div> 
          <div onClick={() => setPage("Page3")}>Show Page 3</div> 
        </> 
      )} 
      { page === "Page1" && <Page1 /> } 
      { page === "Page2" && <Page2 /> } 
      { page === "Page3" && <Page3 /> } 
    </div> 
  ); 
};

只要改成JSX标签的形式,那个hooks数量不一致的报错立刻就会消失啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:54:08