首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >问:如何将公共路线和受保护路线结合起来?(反应路由器)

问:如何将公共路线和受保护路线结合起来?(反应路由器)
EN

Stack Overflow用户
提问于 2020-04-16 10:19:19
回答 1查看 155关注 0票数 0

我目前正在进行一个项目,在这个项目中,我必须使用React路由器(在我看来)建立一些复杂的路由。我只是在一周前才开始使用它,此时我感到不知所措,因为我不知道该如何完成这个任务。

我想要的是一个工作框架,在这里我可以实现发出API调用以获取用户数据的实际逻辑,等等。因此产生了虚拟身份验证。

可选信息:我将使用资料UI来设计这个应用程序。

https://codesandbox.io/s/sleepy-haze-1ug25?file=/src/App.js

1.结构

  1. StartContent (仅在注销时可用)

代码语言:javascript
代码运行次数:0
运行
复制
- `LogIn` (needs to show first)
- `SignUp`
- `ForgotPassword`

  1. MainContent (仅在登录时可用,链接在侧栏中)

代码语言:javascript
代码运行次数:0
运行
复制
- `Overview` (needs to show first)
- `Cashbacks`
- `BankNew`
- `BankExisting`
- `Transactions`
- `Settings`
- `FAQ`
- `LogOutButton`

  1. FooterContent (总是可用的,但只有在选中时,链接才在Footer组件中)

代码语言:javascript
代码运行次数:0
运行
复制
- `Imprint`
- `TermsAndConditions`
- `PrivacyPolicy`

2.用户流

  1. 用户需要登录,LogIn组件是显示的第一件事。它是StartContent的子组件,包含LogInSignUpForgotPassword。用户可以在三个components.
  2. After登录之间导航,StartContent不再可用,NavigationMainContent将显示出来。Navigation将包含另一个名为SideDrawer的组件,它将打开侧栏,以便用户可以选择和导航。为了简单起见,我改变了React 注销的示例,只有StartContent的内容再次可用,LogIn将首先显示。
  3. --Footer组件必须始终可用,无论是否登录。通过它,用户可以访问FooterContent.

3.问题

目前,我只能通过单击相应的链接来访问PrivateRoute。当未登录时,如何设置路由以首先显示LogIn?我不想点击这个链接到那里,并想摆脱它。

登录后,侧边栏显示,注销按钮正常工作,但一旦我选择一个MainContent的路线,边栏消失,没有内容显示。我该怎么解决这个问题?它自己的侧边栏运行良好。

Footer组件应该始终可用。通过它,您可以访问FooterContent的子级。我如何设置它,使它工作,无论我是登录还是退出?

非常感谢你的阅读和抽出时间来帮助我,我真的很感激!

如果您需要更多的信息或有什么不清楚,请告诉我。我知道很多..。

EN

回答 1

Stack Overflow用户

发布于 2020-04-16 10:36:17

看来你需要一个完整的路由结构。以下是它的一个想法/例子:

主路由文件

代码语言:javascript
代码运行次数:0
运行
复制
return (
  <BrowserRouter>
    <Switch>
    <PublicRoute component={Login} path="/login" exact />
    <PublicRoute  component={SignUp} path="/signup" exact />
    <PublicRoute component={ForgotPassword} path="/forgot-password" exact />
    <PrivateRoute component={Overview} path="/overview" exact />
    <PrivateRoute component={Cashbacks} path="/cashbacks" exact />
    <PrivateRoute component={BankNew} path="/bank-new" exact />
    <PrivateRoute component={BankExisting} path="/bank-existing" exact />
    <PrivateRoute component={Transactions} path="/transactions" exact />
    <PrivateRoute component={Settings} path="/settings" exact />
    <PrivateRoute component={FAQ} path="/faq" exact />
    </Switch>
  </BrowserRouter>
);

publicRoute

代码语言:javascript
代码运行次数:0
运行
复制
const PublicRoute = ({component: Component, ...rest}) => {
    return (
        <Route {...rest} render={props => (
            // if user is already logged in, then redirect to the dashboard/overview page
            isLogin()?
                <Redirect to="/overview" />
            : <Component {...props} />
        )} />
    );
};

privateRoute

代码语言:javascript
代码运行次数:0
运行
复制
const PrivateRoute = ({component: Component, ...rest}) => {
    return (
        <Route {...rest} render={props => (
            // if user has not logged in then redirect him to /login page
            isLogin() ?
                <Component {...props} />
            : <Redirect to="/login" />
        )} />
    );
};

这可能不是您所要求的,但会给您一个关于创建路由结构的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61247853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档