javascript - 如果满足条件,则重新路由用户
问题描述
我试图在我的路由器中添加一个条件,如果用户是第一次使用应用程序,它会重定向用户。当用户登录时,返回的对象的属性firstTime
可以是真或假。
我正在尝试使用三元运算符,如下所示:
const ClientRoutes = ({ openHelp }) => {
const firstTime = true;
return (
<div>
<Location>
{({ location }) => (
<Router location={location} primary={false}>
{firstTime ? navigate("/welcome") : null}
<ClientDocFolders path="/" />
<WelcomePageContainer path="/welcome" />
<ErrorNotFound default />
</Router>
)}
</Location>
</div>
);
};
export default withClient(ClientRoutes);
这给了我一个错误说:
Error: Objects are not valid as a React child
我也尝试用这样navigate("/welcome")
的函数调用替换 :{firstTime ? openHelp() : null}
或{firstTime ? ()=> openHelp() : null}
. 这些中的第一个用于重定向我,但是该函数被无休止地反复调用。第二个功能不起作用(我的开放帮助功能永远不会运行)。
我正在使用到达路由器,但我认为这个问题与 JS 有关。
解决方案
您可以使用Redirect
组件进行重定向,localStorage
并可用于保存用户状态。
或者你可以使用useEffect
钩子来导航。
注意:
localStorage
将数据保存在客户端,用户可以随时删除这些数据,所以我建议将数据保存在一些后端数据库中。
const App = () => {
useEffect(() => {
const isNewUser = localStorage.getItem("isNewUser")
? localStorage.getItem("isNewUser")
: localStorage.setItem("isNewUser", false);
if (!isNewUser) {
navigate("/welcome");
}
});
return (
<div>
<h1>Tutorial!</h1>
<nav>
<Link to="/">Home</Link>
<Link to="dashboard">Dashboard</Link>
</nav>
<br />
<Router primary="{false}">
<ClientDocFolders path="/" />
<WelcomePageContainer path="/welcome" />
<ErrorNotFound default />
</Router>
</div>
);
};
没有 React Hook
使用 React Hook 和导航
推荐阅读
- performance - 我试图通过删除分配来缩短代码,但结果以某种方式完全改变了。有什么解释吗?
- javascript - s3 预签名的 url Javascript 代码不返回完整的 url
- python - 如何查看当前剩余库存
- c# - 如何使用 ProxyKit 添加标头
- java - 如何解决java中的500 Internal Server Error?
- r - 列宽不会针对某些类型的数据自动调整
- php - (Laravel)更改新星资源名称?(仅在界面上)
- python - 如何将功能传递给类?
- github - 你如何在论文中引用 GitHub 问题或 GitHub 答案
- javascript - Laravel Ajax 获取请求重定向循环