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

相关文章

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情