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

React中Return语句报错:无法读取undefined的activeModal属性

错误原因与解决方案

核心错误原因

你在ModalProvider.js中使用ModalContext.Provider时,把传递值的属性名写成了大写的Value,而React要求这个属性必须是小写的value。这导致Context没有正确传递modalFeatures对象,所以Modal组件和HomeScreen组件中通过useContext(ModalContext)获取到的是undefined,访问undefined.activeModal自然就抛出了类型错误。

修复步骤

1. 修正ModalProvider中的Provider属性名

打开ModalProvider.js,将<ModalContext.Provider Value={modalFeatures}>改为<ModalContext.Provider value={modalFeatures}>:

// ModalProvider.js 修正后的代码
import { createContext, useState } from "react";
import { CreatePlaygroundModal } from "./Modals/CreatePlaygroundModal";

export const ModalContext = createContext();
 
export const ModalProvider = ({children}) => {
    const [modalType, setModalType] = useState(null);
 
    const closeModal = () => {
        setModalType(null)
    };
   
    const modalFeatures = {
        openModal: setModalType,
        closeModal,
        activeModal: modalType
    }

    console.log({modalType});
    
    return (
        // 注意这里的value是小写!
        <ModalContext.Provider value={modalFeatures}>
            {children}  
        </ModalContext.Provider>
    )
} 

2. 确保组件被ModalProvider包裹

确认你的HomeScreen组件(或者其上层组件)已经被ModalProvider包裹,否则useContext仍然无法获取到Context的值。比如在你的根组件(如App.js)中:

import { ModalProvider } from './Providers/ModalProvider';
import { HomeScreen } from './screens/HomeScreen';

function App() {
  return (
    <ModalProvider>
      <HomeScreen />
    </ModalProvider>
  );
}

export default App;

验证修复

完成上述修改后,重新运行项目:

  • 点击按钮调用openCreatePlayGroundModal时,modalType会被设置为"CREATE_PLAYGROUND"
  • Modal组件中modalFeatures.activeModal就能正确获取到值,从而渲染CreatePlaygroundModal组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:09