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

React跨组件点击切换报错:TypeError: Cannot read properties of null (reading 'useState')

解决React组件切换功能的TypeError问题

错误原因及修复步骤

1. 未导入useState钩子

TypeError: Cannot read properties of null (reading 'useState')的直接原因是没有从React中显式导入useState,React钩子必须导入后才能使用。

2. 子组件未接收父组件状态

SubMenu无法访问MainMenu中的切换状态,因为状态是父组件的局部变量,需要通过props传递给子组件。

3. 变量拼写错误

代码中将toggle误写为toogle,导致状态无法正确读取和更新。

4. 未定义的变量

SubMenu里的title和imgUrl未声明,需通过props传入或在组件内部定义。


修复后的完整代码

import { useState, FC } from 'react';
// 根据实际项目导入Image组件,示例用next/image
import Image from 'next/image';

// 定义SubMenu的props类型
interface SubMenuProps {
  toggle: boolean;
  title: string;
  imgUrl: string;
}

export const MainMenu: FC = () => {
    // 修正拼写:toogle → toggle
    const [toggle, setToggle] = useState(false);
    // 定义菜单标题和图片路径
    const menuTitle = "菜单标题";
    const menuImgUrl = "/path/to/menu-icon.png";

    return(
        <>
            {/* 通过props传递状态和参数给SubMenu */}
            <SubMenu toggle={toggle} title={menuTitle} imgUrl={menuImgUrl} />
            <div>
              <button onClick={() => setToggle(!toggle)}>click</button>
            </div>
        </>
    );
}

export const SubMenu: FC<SubMenuProps> = ({ toggle, title, imgUrl }) => {
    return(
        <>
           <div className="menu">
             <Image src={imgUrl} width="20" height="20" alt="菜单图标" />
           </div>
           {/* 使用父组件传递的toggle状态控制文本显示 */}
           {toggle && (<span className="menu-text">{title}</span> )}  
        </>
    );
}

App.tsx

// 修正导入路径拼写错误:Memu → Menu
import { MainMenu} from '../Menu';

function App() {
  return (
    <MainMenu />
  );
}
export default App;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:27