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

React项目使用useLocation时useContext返回undefined问题求助

问题产生原因
  • React版本不满足Hooks要求:Hooks是React 16.8.0版本才正式上线的特性,如果项目中安装的React版本低于16.8.0,所有内置Hook包括useContext都会触发未定义报错。
  • useLocation调用环境不符合要求:useLocation是react-router提供的路由Hook,只能在被/等Router组件包裹的子组件内部调用,如果PricingPage不在Router的作用范围内,会触发Hook调用异常。
  • Context未正确配置:要么是LangStateContext没有在PricingPage的上层组件用对应Provider包裹,要么是Provider传递的value值为undefined,解构isIndoSelected属性时会触发报错。
  • 依赖包版本不匹配:如果react-router和react-router-dom的版本不一致,或者路由依赖版本过旧,也会导致内置Hook调用异常。
  • Context引入路径错误:如果../context/LangContext的相对路径填写错误,会导致引入的LangStateContext本身是undefined,调用useContext时直接报错。
解决方案
  1. 升级React版本到符合要求的版本
    在项目根目录执行命令查看当前React版本:
    npm list react
    如果版本低于16.8.0,执行以下命令升级到最新稳定版:
    npm install react@latest react-dom@latest

  2. 确认Router组件正确包裹路由页面
    检查根组件(通常为App.jsx/main.jsx)的配置,确保PricingPage对应的路由项写在Router组件内部,参考配置:

import { BrowserRouter, Routes, Route } from 'react-router-dom'
import PricingPage from './pages/PricingPage'

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/pricing" element={<PricingPage />} />
        {/* 其余路由配置 */}
      </Routes>
    </BrowserRouter>
  )
}
  1. 检查Context Provider配置
    确认LangStateContext的Provider已经包裹PricingPage的上层组件,且正确传入value参数,参考配置:
import { useState } from 'react'
import { LangStateContext } from './context/LangContext'
import App from './App'

function RootEntry() {
  const [isIndoSelected, setIsIndoSelected] = useState(false)
  return (
    <LangStateContext.Provider value={{ isIndoSelected, setIsIndoSelected }}>
      <App />
    </LangStateContext.Provider>
  )
}
  1. 统一路由依赖版本
    执行以下命令将路由依赖升级为同版本的最新稳定版,避免版本不兼容问题:
    npm install react-router@latest react-router-dom@latest

  2. 校验Context引入路径
    检查../context/LangContext的相对路径是否正确,确保路径可以匹配到你定义LangStateContext的源文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:03