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

React父组件向子组件传Context对象,子组件为何接收undefined?

React Context传递对象子组件获取undefined的解决方案

问题根源

父组件中MenuContext是命名导出(export const MenuContext),但子组件错误使用了默认导入(import MenuContext from "./Home.js")。此时子组件拿到的MenuContext实际是父组件的默认导出(即Home组件),而非你创建的Context对象,因此useContext(MenuContext)返回undefined。

修复步骤

1. 修正子组件的Context导入方式

将子组件的导入语句改为命名导入:

// LandingPage.js
// 替换原导入语句
import { MenuContext } from "./Home.js"

2. 可选:给Context设置默认值(增强健壮性)

创建Context时传入默认值,避免组件未被Provider包裹时出现意外报错:

// Home.js
export const MenuContext = createContext({}) 

3. 可选:添加可选链操作符防止报错

在访问对象属性时使用?.,即使中间属性不存在也不会抛出错误:

<Button onClick={bigObject?.p0?.someProperty}>
  Click me!
</Button>

修复后的完整子组件代码

import React, { useContext} from "react";
import Button from "react-bootstrap/Button";

// 正确导入命名导出的Context
import { MenuContext } from "./Home.js"

export default function LandingPage({ isThisPageActive }) {
  const bigObject = useContext(MenuContext);

  let renderThis = null;
  if (isThisPageActive) {
    renderThis = (
      <Button onClick={bigObject?.p0?.someProperty}>
        Click me!
      </Button>
    );
  }

  return (
    <div>
      {renderThis}
    </div>
  );
}

验证要点

确认子组件确实被MenuContext.Provider包裹(你的代码已满足),修复后即可正常获取到传递的iconsObject对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:57:59