react-router中公共部分Header和SideBar的编写方式

2023-10-10 11:32

本文主要是介绍react-router中公共部分Header和SideBar的编写方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

react-router中公共部分Header和SideBar的编写方式

初学react-router,在项目中涉及登录页面是独立的,其他页面拥有共同的HeaderSideBar组件,在这里把这两个公共部分封装到App中。

一种实现方式,把App通过import到每个页面,对每个页面进行封装。
Routes定义如下:

    <ConnectedRouter history={history}><div><Route exact path="/login" component={LoginPage} /><Route exact path="/" component={privateRoute(App)} /><Route path="/users" component={privateRoute(UserListPage)} /><Route path="/chpwd" component={privateRoute(ChpwdPage)} /><Route path="/user" component={privateRoute(User)} /><Route path="/logout"  onEnter={props.logout} /></div></ConnectedRouter>

在调试时,发现在每个页面的render中需要用App包装,比较繁琐,同时每个页面使用Router跳转时,
HeaderSideBar组件在没有变化时,也在重复渲染。

如果使用下面方法编写Routes,可以解决公共部分不需要重复渲染,同时每个页面不必用App单独封装。

    <ConnectedRouter history={history}><div><Route exact path="/login" component={LoginPage} /><Route exact path="/" component={privateRoute(App)} /><Route path="/app" component={privateRoute(App)} /><Route path="/app/users" component={privateRoute(UserListPage)} /><Route path="/app/chpwd" component={privateRoute(ChpwdPage)} /><Route path="/app/user" component={privateRoute(User)} /><Route path="/logout"  onEnter={props.logout} /></div></ConnectedRouter>

由于Route是可以多个同时匹配的一起使用,比如: ‘/app/users’, 会同时渲染’/app’和’/app/users’两个路由模块。在这里’/app’模块是公共部分,当无数据变化时,react可以自行判断避免重复渲染。

第三种方法是把路由嵌入到页面layout中,把对应路由放在页面对应的位置。

<Provider store={store}><ConnectedRouter history={history}><div id="application"><Route exact path="/login" component={LoginPage} />{devTools}<HeaderPage /><div className="container"><nav className="nav left"><LeftPage /></nav>{/* <TopMenu items={menuItems} /> */}<section className="main"><Route path="/users" component={privateRoute(UserListPage)} /><Route path="/chpwd" component={privateRoute(ChpwdPage)} /></section></div></div></ConnectedRouter></Provider>

这篇关于react-router中公共部分Header和SideBar的编写方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180157

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可