history.push() 给出 404
history.push() giving 404
我正在尝试在使用历史记录进行身份验证时使用重定向用户,但出于某种原因,它给了我 404。
这些是我的路由器,我正在用它们导出历史记录。
export let history = createBrowserHistory();
<Router history={history}>
<div>
<Header />
</div>
<Switch>
<Route path="/" component={LoginPage} />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/add" component={AddExpense} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route component={NotFoundPage} />
</Switch>
</Router>
在我的 app.js 中,我正在导入并使用它。
在我的控制台中,我已注销,因此它应该重定向到“/”但不是。
let hasRendered = false;
const renderApp = () => {
if (!hasRendered) {
ReactDOM.render(jsx, document.getElementById("root"));
hasRendered = true;
}
}
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log("Log in");
store.dispatch(startSetExpense()).then(() => {
renderApp();
if (history.location.pathname === '/') {
history.push('/dashboard');
}
});
}
else {
console.log('Logout');
renderApp();
history.push('/');
}
});
编辑 1:
我尝试调试程序,发现问题不在于路由,而在于路由器或历史记录。这些路由与 BrowserRouter 完美配合。
编辑 2:
renderApp 只渲染应用程序
let hasRendered = false;
const renderApp = () => {
if (!hasRendered) {
ReactDOM.render(jsx, document.getElementById("root"));
hasRendered = true;
}
};
像下面这样更新路由路径:
<Switch>
<Route path="/" component={LoginPage} exact />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/add" component={AddExpense} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route path="*" component={NotFoundPage} />
</Switch>
请像这样更新并检查。我通常这样使用它并且效果很好:
<Switch>
<Route exact path="/" component={LoginPage} />
<Route exact path="/dashboard" component={ExpenseDashboardPage} />
<Route exact path="/add" component={AddExpense} />
<Route exact path="/edit/:id" component={EditExpensePage} />
<Route exact path="/help" component={HelpPage} />
<Route path="/" component={NotFoundPage} />
</Switch>
使用 react-router v5.2.0 和 history v4.9.0 来完成这项工作。
https://codesandbox.io/s/quizzical-dan-z3725
或
尝试使用 BrowserHistory https://reactrouter.com/web/example/basic
当我们使用不同的版本时,customHistory 似乎有一些问题
最初在这里回答:
我正在尝试在使用历史记录进行身份验证时使用重定向用户,但出于某种原因,它给了我 404。 这些是我的路由器,我正在用它们导出历史记录。
export let history = createBrowserHistory();
<Router history={history}>
<div>
<Header />
</div>
<Switch>
<Route path="/" component={LoginPage} />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/add" component={AddExpense} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route component={NotFoundPage} />
</Switch>
</Router>
在我的 app.js 中,我正在导入并使用它。 在我的控制台中,我已注销,因此它应该重定向到“/”但不是。
let hasRendered = false;
const renderApp = () => {
if (!hasRendered) {
ReactDOM.render(jsx, document.getElementById("root"));
hasRendered = true;
}
}
firebase.auth().onAuthStateChanged((user) => {
if (user) {
console.log("Log in");
store.dispatch(startSetExpense()).then(() => {
renderApp();
if (history.location.pathname === '/') {
history.push('/dashboard');
}
});
}
else {
console.log('Logout');
renderApp();
history.push('/');
}
});
编辑 1: 我尝试调试程序,发现问题不在于路由,而在于路由器或历史记录。这些路由与 BrowserRouter 完美配合。
编辑 2: renderApp 只渲染应用程序
let hasRendered = false;
const renderApp = () => {
if (!hasRendered) {
ReactDOM.render(jsx, document.getElementById("root"));
hasRendered = true;
}
};
像下面这样更新路由路径:
<Switch>
<Route path="/" component={LoginPage} exact />
<Route path="/dashboard" component={ExpenseDashboardPage} />
<Route path="/add" component={AddExpense} />
<Route path="/edit/:id" component={EditExpensePage} />
<Route path="/help" component={HelpPage} />
<Route path="*" component={NotFoundPage} />
</Switch>
请像这样更新并检查。我通常这样使用它并且效果很好:
<Switch>
<Route exact path="/" component={LoginPage} />
<Route exact path="/dashboard" component={ExpenseDashboardPage} />
<Route exact path="/add" component={AddExpense} />
<Route exact path="/edit/:id" component={EditExpensePage} />
<Route exact path="/help" component={HelpPage} />
<Route path="/" component={NotFoundPage} />
</Switch>
使用 react-router v5.2.0 和 history v4.9.0 来完成这项工作。
https://codesandbox.io/s/quizzical-dan-z3725
或
尝试使用 BrowserHistory https://reactrouter.com/web/example/basic
当我们使用不同的版本时,customHistory 似乎有一些问题
最初在这里回答: