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

Next.js使用React Context Hook出现未声明错误如何解决

错误原因

  • 你将dataContext的创建逻辑写在了MyApp组件内部,这既是局部变量外部文件无法访问,还会导致每次MyApp渲染都会生成新的Context实例,无法全局复用。
  • LoginForm组件内没有引入dataContext的实例引用,自然会报变量未声明的错误,DevTools里能看到Context是因为Provider已经挂载,并不代表你的组件代码拿到了Context的引用。

解决步骤

  1. 单独抽离Context定义到全局文件
    新建src/contexts/DataContext.js(路径可自行调整),代码如下:
import React from "react";
const DataContext = React.createContext();
export default DataContext;

注意:自定义Context遵循大驼峰命名规范,避免JSX识别异常

  1. 修改_app.js引入Context实例
import React from "react";
import DataContext from "../contexts/DataContext"; // 替换为你自己的文件路径

function MyApp({ Component, pageProps }) {
  return (
    <DataContext.Provider value='just some text'>
      <Component {...pageProps} />
    </DataContext.Provider>
  )
}
export default MyApp
  1. 修改loginForm.js引入Context再使用
    另外你代码里的handleSubmit看起来是React Hook Form的API,也要记得引入初始化,否则会继续报错:
import React from "react";
import DataContext from "../contexts/DataContext"; // 替换为你自己的文件路径
import { useForm } from "react-hook-form"; // 如果你没用这个库可以删掉对应逻辑

function LoginForm (props) {
  const { handleSubmit } = useForm();
  const info = React.useContext(DataContext)
  const onSubmit = () => console.log(info)

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <button type="submit">click here</button>
   </form>
  )
}
export default LoginForm;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:05