reactjs - 如何修复反应路线的重定向?
问题描述
我有一个关于 React 重定向的问题。这是我的 App.js 文件中的路线:
<Switch>
<Route exact path="/">
<Home />
</Route>
<Route path="/about" component={About} />
<Route path="/login">
<Login onLoginSuccess={setUserSession} />
</Route>
<Route path="/register">
<Register />
</Route>
<LoggedInRoute userData={getUserData()} path="/feed">
<Feed />
</LoggedInRoute>
</Switch>
这是 LoggedInRoute 组件:
import React from 'react';
import { Redirect, Route } from "react-router-dom";
function LoggedInRoute(props) {
return (
<Route
render={({ location }) =>
props.userData.id ? (
props.children
) : (
<Redirect
to={{
pathname: "/login",
state: { from: location }
}}
/>
)
}
/>
);
}
export default LoggedInRoute;
这是登录获取:
const onFinish = values => {
fetch('/api/login',
{
method: 'POST',
body: JSON.stringify(values)
}
).then(response => response.json())
.then(data => {
if (data.success === 1) {
if (location.state.from) {
history.push(location.state.from.pathname);
}
}
});
};
我的问题是成功登录后重定向不起作用。如果我在未登录时尝试访问“/feed”,首先我会被重定向到“/login”,但在成功登录后,我不会被重定向回初始路由(/feed)。我不确定我错过了什么。提前谢谢你们,伙计们:)
解决方案
如果我是你,我会采用这种方法:
import { Redirect, Route, useLocation } from "react-router-dom";
function LoggedInRoute({ userData, children }) {
const location = useLocation();
const [redirect, setRedirect] = useEffect(false);
useEffect(() => {
if (!userData || !userData.id) {
setRedirect(true);
}
}, [userData]);
if (redirect) {
return (
<Redirect
to={{
pathname: "/login",
state: { from: location }
}}
/>
);
}
return <Route component={<>{children}</>} />;
}
这样你就不会得到任何stale
数据
推荐阅读
- openstack - 只能以管理员用户身份重置 cinder 卷状态
- list - 在循环中有效地聚合(拟合器/选择)大型数据帧并创建新数据帧
- java - 从 Hystrix 获取异常
- node.js - express.handlebars 没有正确路由
- google-cloud-platform - Google Workflows:Args 标头似乎是“标头”
- flutter - Flutter:向启动器菜单和主屏幕添加快捷方式
- algorithm - 非 BST 二叉树中 BST 子树的最大和
- c++ - 如何将现有的 Q_PROPERTY 重新定义为 REQUIRED?
- java - Android FragmentTransaction 只提交一个 Fragment
- azure - 如何开始使用 Microsoft 沉浸式阅读器 SDK?