[英]React-router-dom Router not working. Jumps to 404 page only
我正在一个小项目中使用 react router。 我最初让我的AppRouter
与BrowserRouter
AppRouter
工作,一切正常。 但我不得不切换到Router
这样我才能添加我自己的历史对象。 使用Router
我的页面导航不起作用,而是直接跳转到我的 404 页面。 任何关于我做错了什么的建议将不胜感激。
import React from "react";
import AddExpensePage from "../components/AddExpensePage";
import EditExpensePage from "../components/EditExpensePage";
import ExpenseDashboardPage from "../components/ExpenseDashboard";
import Header from "../components/Header";
import HelpPage from "../components/HelpPage";
import NotFoundPage from "../components/NotFoundPage";
import { createBrowserHistory } from "history";
import LoginPage from "../components/LoginPage";
import { Switch, BrowserRouter, Route, Router } from "react-router-dom";
export const history = createBrowserHistory();
const AppRouter = () => (
<Router history={history}>
<div>
<Header />
<Switch>
<Route path="/" component={LoginPage} exact={true} />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/create" component={AddExpensePage} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route component={NotFoundPage} />
</Switch>
</div>
</Router>
);
export default AppRouter;
您必须使用BrowserRouter
组件包装您的路由,例如:
const AppRouter = () => (
<Router history={history}>
<div>
<Header />
<BrowserRouter>
<Switch>
<Route path="/" component={LoginPage} exact={true} />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/create" component={AddExpensePage} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route component={NotFoundPage} />
</Switch>
</BrowserRouter>
</div>
</Router>
);
我建议您继续使用BrowserRouter
。 尽管您使用的路由器类型,React Hooks 现在可以使用历史记录。
从ReactRouter 文档 中, useHistory
可以为您提供帮助:
useHistory
挂钩使您可以访问可用于导航的历史记录实例。
要访问路由组件内应用程序中任何位置的history
对象,您可以在该组件内执行以下操作:
let history = useHistory();
然后您可以访问history.push()
和其他您希望调用的方法来处理history
。
结论:
不要切换到<Router>
,继续使用<BrowserRouter>
并使用钩子使用useHistory
访问history
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.