javascript - 实现身份验证路由 - 使用嵌套的 /signin 和 /signup 路由
问题描述
我想signin/signup
用 react-router-dom 实现简单的路由。
这是 App.js
<div className="App">
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/auth" component={SignInSignUpPage} />
</Switch>
</div>
我正在使用这样的路由保护:
const HomePage = ({ currentUser }) => {
return currentUser ? <HomePageComponent /> : <Redirect to="/auth" />;
};
现在我想要做的是拥有/auth
路由,供用户登录,并且在两者的容器内signInSignUp
,我有一个链接,它将更改路由auth/signup
以查看注册页面,如下所示:
const SignInSignUpPage = ({ match }) => {
return (
<SignInSignUpContainer>
<Route path={`${match.path}`} component={SignIn} />
<Route path={`${match.path}/signup`} component={SignUp} />
</SignInSignUpContainer>
);
};
这反过来将呈现正确的组件:
const SignInSignUpContainer = ({ match, children, history }) => {
const { isExact } = match;
return (
<SignInSignUpContainerContent>
<SignInSignUpContainerContentForm>
<LockIconContainer iconName="icon-lock-closed" />
{children}
</SignInSignUpContainerContentForm>
</SignInSignUpContainerContent>
);
};
我一定做错了,react-router-dom 文档正在解决受保护的路由,我发现它不适合这种情况。
解决方案
仅从结构来看:您不会将match
prop 向下发送到SignInSignUpContainer
,并且似乎SignInSignUpContainer
期望它。
应该 :
const SignInSignUpPage = ({ match }) => {
return (
<SignInSignUpContainer match={match}>
<Route path={`${match.path}`} component={SignIn} />
<Route path={`${match.path}/signup`} component={SignUp} />
</SignInSignUpContainer>
);
};
与history
道具相同
推荐阅读
- javascript - 如何使用 AJAX 将所有选中的项目发送到 php
- scala - Intellij:如何从上一行的开头缩进下一行的 2 个空格?
- stata - 在 Stata 中汇集和保存多个估算数据的简单技术
- ios - 是否可以将 UINavigationView 嵌入到 UIView
- python - 为什么 libvirt virdomain guest os 可能会忽略重新启动或关闭的请求?
- python - 在 Python 中切换到非 root 用户并运行命令
- python - 如何从图像中提取对象?
- spring - Spring security注销链接错误:“此链接已禁用,因为无法匹配导航案例。”
- python-3.x - python中的多行输出并在python 3.6中使用format()
- mysql - 向广播节目 mysql 添加更多歌曲