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

React中使用Navigate组件跳转报错:需在Router上下文内使用

问题:使用<Navigate>组件跳转时出现"需在<Router>上下文使用"错误

我想实现点击按钮跳转到添加页面的功能,尝试用<Navigate>组件后触发如下错误:

Uncaught Error: may be used only in the context of a component.

以下是我的代码:

Home.js

const[gotoAdd, setAdd] = React.useState(false);

if(gotoAdd){
  return <Navigate to="/Add"/>
}

<Button color="inherit" onClick={()=>{
        setAdd(true);
      }}>Add Employee</Button>

Add.js

import React from 'react'

export const Add = () => {
  return (
    <div>Addd</div>
  )
}
export default Add;

解决方案

错误原因

<Navigate>组件(以及所有React Router的路由相关API)必须在<Router>组件的上下文范围内才能工作,你的代码里缺少了这个必要的包裹。

方法1:给根组件添加Router包裹

在项目的入口文件(比如index.js)中,用BrowserRouter(或其他Router类型)包裹你的根组件,确保所有路由相关组件都处于Router上下文里:

import { BrowserRouter as Router } from 'react-router-dom';
import App from './App';

ReactDOM.render(
  <Router>
    <App />
  </Router>,
  document.getElementById('root')
);

方法2:用useNavigate钩子替代状态控制跳转(更简洁推荐)

不需要通过state来触发<Navigate>返回,直接使用React Router提供的useNavigate钩子实现跳转逻辑,代码更简洁:
修改Home.js:

import { useNavigate } from 'react-router-dom';

const Home = () => {
  const navigate = useNavigate();

  return (
    <Button color="inherit" onClick={() => navigate('/Add')}>
      Add Employee
    </Button>
  );
};

额外检查:确保路由配置正确

别忘了在你的路由配置文件(比如App.js)中添加/Add路径的路由规则:

import { Routes, Route } from 'react-router-dom';
import Home from './Home';
import Add from './Add';

function App() {
  return (
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/Add" element={<Add />} />
    </Routes>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:34