Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >问:如何将公共路线和受保护路线结合起来?(反应路由器)

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

Stack Overflow用户
提问于 2020-04-16 02: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
运行
AI代码解释
复制
- `LogIn` (needs to show first)
- `SignUp`
- `ForgotPassword`

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- `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 02:36:17

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

主路由文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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
运行
AI代码解释
复制
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

复制
相关文章
真正彻底卸载ie8的某些加载项
但是,有的加载项“删除”不可选的,这时如果是你不想要的或流氓加载项咋办?如果你不只是禁用掉它,还需要永久删除掉它,怎么办?
williamwong
2018/07/24
8320
真正彻底卸载ie8的某些加载项
分离链接的散列散列代码实现
散列 散列为一种用于以常数平均时间执行插入,删除和查找的技术。一般的实现方法是使通过数据的关键字可以计算出该数据所在散列中的位置,类似于Python中的字典。关于散列需要解决以下问题: 散列的关键字如何映射为一个数(索引)——散列函数 当两个关键字的散列函数结果相同时,如何解决——冲突 散列函数 散列函数为关键字->索引的函数,常用的关键字为字符串,则需要一个字符串->整数的映射关系,常见的三种散列函数为: ASCII码累加(简单) 计算前三个字符的加权和$\sum key[i] * 27^{i}$ (不太
月见樽
2018/04/27
1.5K0
散列/散列函数「建议收藏」
每个关键字被映射到从0-TableSize-1这个范围中的某个数,并且被放到适当的单元中。这种映射就叫做散列函数
全栈程序员站长
2022/08/28
8930
散列/散列函数「建议收藏」
散列算法与散列码
一、引入 1 /** 2 * Description:新建一个类作为map的key 3 */ 4 public class Groundhog 5 { 6 protected int number; 7 8 public Groundhog(){ 9 } 10 public Groundhog(int number) 11 { 12 this.number = number; 13 } 14 15 @Overr
JMCui
2018/03/15
1.5K0
散列算法与散列码
散列
将一个元素的关键码和存储位置之间建立对应的函数关系 Hash( ), 使得每个关键码与结构中的唯一的存储位置相对应:
Rikka
2022/02/07
1.8K0
散列
选择键值,冲突的时候采取不同的策略 散列函数: 简单的散列函数: 1 int hash(const string & key,int tableSize) 2 { 3 int hashVal = 0; 4 for(int i = 0; i < key.length();++i) 5 { 6 hashVal + = key[i]; 7 } 8 return hashVal % tableSize; 9 } 比较好的散列函数: 1 int hash( c
用户1154259
2018/01/17
8140
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
8990
使用VBA遍历数据验证列表中的每一项
想要遍历数据验证列表中的每一项,如何编写VBA代码呢?如果数据验证列表中的项值来源于单元格区域或者命名区域,则很简单,遍历该区域即可。然而,有些数据验证列表是直接使用逗号分隔的项添加的,这就需要使用不同的方法。
fanjy
2023/08/29
4900
使用VBA遍历数据验证列表中的每一项
散列冲突
概念:如果当一个元素被插入时与一个已经插入的元素散列到相同的值, 那么就会产生冲突, 这个冲突需要消除。解决这种冲突的方法有几种:本章介绍两种方法:分离链接法和开放定址法
全栈程序员站长
2022/08/27
5960
Hash散列[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146553.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/27
6720
遍历ArrayList,并删除某些元素的方法实现「建议收藏」
本文是根据 https://blog.csdn.net/qq_32575047/article/details/78902254 的帖子进行整理的,在此感谢一下。
全栈程序员站长
2022/11/14
4380
散列函数
散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。
233333
2019/09/24
9200
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.2K0
散列查找
详解Echarts中的配置项
我把Echarts中常用的标题、图例、提示框、工具栏等配置项归类到Echarts 图表的基本配置项。各个配置项主要的配置参数如下:
九仞山
2023/10/14
8260
PHP:返回指定页码数集合项的新集合
PHP内置了 array_slice(array,start,length,preserve) 方法就可以实现这个了,然后还可以简单封装一下
Alone88
2019/10/21
7140
java检验数组重复_java – 如何遍历数组并检查重复项?「建议收藏」
您可以使用嵌套循环遍历数组以查看新输入是否存在.在函数中执行此操作会更好.此外,在执行此操作时,您需要确保您不在第一个元素,否则您将获得空指针异常.
全栈程序员站长
2022/09/29
1.4K0
MySql缓存中的关键项
MySql的设计中大量使用了缓存,下面这些缓存配置项是应该熟知的 key_buffer_size key_buffer_size是设置MyISAM表索引的缓冲区大小,此参数对MyISAM表性能影响最大 对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB table_cache table_cache是指表高速缓存的大小。当MySQL访问一个表时,如果在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容 一般通过查看 Open_tabl
dys
2018/04/02
1.3K0
iView使用中的注意项
官网 https://www.iviewui.com/components/table Table <template> <div> <Table border :columns="table_header" :data="table_data"> <template slot-scope="{ row }" slot="name"> <strong>{{ row.name }}</strong> </template> <template s
码客说
2021/11/12
1.1K0
浅谈散列运算
“指纹”一词形象地描述了散列运算的结果。在现实生活中,两个人可能长得很像,但是他们的指纹不同,根据指纹就能对这两个人进行区分。
小蜜蜂
2019/07/24
1.1K0
浅谈散列运算
搜索引擎中的URL散列
散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术。在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页。最理想的状态是对联网上所有的网页都分配一个哈希地址,可想而知这是一个相当宠大的数字,但实际上往往是无法做到这一点。虽然google、百度都是采用分布式的机群进行哈希排重,但实际上也是做不到所有的网页都分配一个唯一散列地址。但是可以通过多级哈希来尽可能地解决,但却要会出时间代价在解决哈希冲突问题。所以这是一个空间和时间相互制约的问题,我们知道哈希地址空间如果足够大可以大大减少冲突次数,所以可以通过多台机器将哈希表根据一定的特征局部化,分散开来,每一台机器都是管理一个局部的散列地址。
Java架构师必看
2021/03/22
1.7K0

相似问题

在nodejs和镜像上使用HTML5

12

NodeJS + Websockets + HTML5视频标签和‘流媒体’

11

通过nodejs服务html5

10

NodeJS + HTML5 + Telnet =可能吗?

10

NodeJS和HTML5 Websockets不能一起工作

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文