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

React中useNavigate()报错:需在<Router>组件上下文使用的问题咨询

问题原因

你遇到的错误核心是:useNavigate() 钩子必须在 <BrowserRouter>(或任何React Router提供的Router组件)的内部组件中调用,而你的代码里,useNavigate() 是在App组件中直接声明的,但App组件本身位于<BrowserRouter>的外部,没有被Router的上下文覆盖,所以无法获取到导航所需的上下文信息。

解决方案

有两种常见的修复方式:

方式一:将BrowserRouter提升到App组件外部

在项目的入口文件(通常是index.js)中用<BrowserRouter>包裹整个App组件,这样整个应用都处于Router的上下文环境中,App组件内部就能正常使用useNavigate()了:

// index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

然后修改App组件,移除内部的<BrowserRouter>:

// App.jsx
import { Route, Routes, useNavigate } from 'react-router-dom';
import MyNav from "./MyNav";
import Login from "./routes/Login"

function App() {
  const navigate = useNavigate();
  // 这里可以正常使用navigate了
  return (
    <div className="App">
      <MyNav />
      <Routes>
        <Route path="/login" element={<Login />} />
      </Routes>
    </div>
  );
}
export default App;

方式二:将useNavigate移到Router内部的组件中

如果不想修改入口文件,也可以把需要使用useNavigate()的逻辑移到<BrowserRouter>内部的子组件里,比如把导航逻辑放到MyNav组件中:

// App.jsx
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import MyNav from "./MyNav";
import Login from "./routes/Login"

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <MyNav /> {/* MyNav在Router内部,可以正常使用useNavigate */}
        <Routes>
          <Route path="/login" element={<Login />} />
        </Routes>
      </BrowserRouter>
    </div>
  );
}
export default App;

然后在MyNav组件中使用useNavigate():

// MyNav.jsx
import { useNavigate } from 'react-router-dom';

function MyNav() {
  const navigate = useNavigate();
  
  const goToLogin = () => {
    navigate('/login');
  };

  return (
    <nav>
      <button onClick={goToLogin}>去登录页</button>
    </nav>
  );
}
export default MyNav;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:52:25