应用场景

在前端开发的过程中,时常有这样的一个需求,需要将某个组件,展示在不同的页面中。常见的有,头部菜单栏、底部版权,如下图中的菜单,就需要在不同页面中进行显示。

解决方法

假设有这样一个需求,希望把下面的这个头部菜单在 Home 和 About 这两个页面中显示

在页面中,引入公共组件

在需要显示头部组件的页面中,引入头部组件,如下所示。

这样确实能解决问题,但比较麻烦,需要在每个使用的页面中,都引入一次。

另外一个问题是,在 Header 组件内部的状态,切换路由后,状态会被重置,如下所示。

代码如下

如果希望状态不被重置,可以使用 redux 或 mobx,将状态保存到全局。

在路由组件外面,引入公共组件

这样,在所有页面中都会显示 Header 组件。

不过,由于 Header 组件是在路由组件外面引入的,导致无法在 Header 组件中,使用路由相关的功能,比如 Link 组件。如果只是进行路由页面跳转,那还好办,可以使用 a 标签代替 Link 组件,如下图所示。

在路由组件外面引入 Header 组件的另外一个问题是, Header 组件会在所有页面中展示,而有时,我们只是希望能够在特定页面中进行显示。

在路由组件中,引入公共组件

在 HashRouter 组件中引入 Header 组件,Header 组件可以正常使用路由的相关功能。

不过,Header 组件还是会在所有页面中进行显示,如果只希望它在特定页面中进行显示,那么,我们需要将公共组件放在 Route 中,并修改匹配路径,如下所示。

将公共组件放在 Route 组件中,并定义匹配路径,接着修改 Switch 组件中相应的路由匹配规则,如想在 Home 和 About 页面中显示 Header 组件,那么就在路径匹配中添加 /app,这样就可以实现,在特定页面中显示某个组件。

由于添加了 /app 路径前缀后,导致 URL 输入 / 不会显示 Home 页,想解决这个问题,可以使用重定向 Redirect 组件,如下所示。

还有一种不太推荐的方式,也可以实现在特定页面显示某个组件,Route 组件不写 path,然后在相应的组件中,判断当前页面的 hash 是否与目标吻合,如果匹配,则显示组件,否则返回 null。

总结

在页面中引入公共组件

  • 麻烦,每个页面中都要引入一次
  • 切换路由,导致组件重新渲染,状态会被重置

在路由组件外部引入公共组件

  • 会在所有页面中显示,如果想要在特定页面显示,需要自行判断
  • 无法使用路由提供的相关组件和功能

在路由组件内部引入公共组件

  • 支持特定路由显示某个组件
  • 可以正常使用路由提供的相关功能

在以上三种方式,都无法保证组件内部的状态不被重置,如果路由前缀发生改变,哪怕把公共组件放在了,路由组件内部,状态还是会被重置,所以如果有必要,可以把状态放在全局中。

作者:追梦子
原文:https://www.cnblogs.com/pssp/p/10742385.html

路由到另外一个页面_如何在多个页面中,引入一个公共组件相关推荐

  1. 【水汐のC#】计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩。实现如下要求的功能:

    设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩.实现如下要求的功能: 根据姓名查询该学生的总成绩: 统计全班学生总分的 ...

  2. 以小组为单位,设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩。

    设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩. 实现如下要求的功能: 1.根据姓名查询该学生的总成绩: 2.统计全班 ...

  3. 使用cmd命令在桌面上新建一个文件夹,且在文件夹中新建一个.java文件,使用cmd命令实现.java文件的编译运行

    标题使用cmd命令在桌面上新建一个文件夹,且在文件夹中新建一个.java文件,使用cmd命令实现.java文件的编译运行 1.在电脑桌面使用快捷键win+r打开 2.打开cmd命令界面之后使用md d ...

  4. 404 错误页面_如何设计404错误页面,以使用户留在您的网站上

    404 错误页面 重点 (Top highlight) 网站设计 (Website Design) There is a thin line between engaging and enraging ...

  5. iframe 覆盖父页面_一次iframe子页面与父页面的通信

    事件回顾: 收到需求,说是要在别人的系统里嵌入目前由我维护的系统,嵌入的逻辑不多,只有一个创建流程. 刚开始觉得没什么,不就是你改改,我改改,你给我url加个参数,我知道是你调用,修改下页面balab ...

  6. layui 如何动态加载局部页面_从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

    前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...

  7. layui 如何动态加载局部页面_从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!...

    作者:撒网要见鱼 原文链接:http://www.dailichun.com/2018/03/12/whenyouenteraurl.html 「----超长文预警,需要花费大量时间.----」 本文 ...

  8. 小程序订单点击不同页面_小程序跳转页面参数丢失

    垂死病中惊坐起,笑问 Bug 何处来?! 1.先是大写字母作祟 前两天发布了「柒留言」v2.0.0 新版本,结果...你懂的嘛,没有 Bug 的程序不是好程序,写不出 Bug 的程序员不是好程序员. ...

  9. 指令流水 一个时钟周期 出一个结果_以SM3算法为例,构建一个软硬协作算法加速器:性能分析与优化...

    衡量一款 ASIC 芯片可以从 PPA 三个角度进行. PPA 指的是: Power/Performance/Area,功耗 / 性能 / 面积. 衡量 FPGA 设计同样可以参照 PPA,但又有所不 ...

最新文章

  1. 耐寂寞谋定未来-农业大健康·国情讲坛:乡村振兴守公益心
  2. mysql-5.5密码是多少_关于mysql-5.5数据库密码的设置和重置
  3. linux udp广播转发到所有ip,linux – 所有接口上的UDP广播
  4. wordpress发布文章错误:此响应不是合法的JSON响应
  5. java编程_Java最热常用编程软件分享
  6. Linux的Netfilter框架深度思考-对比Cisco的ACL
  7. Android-7.0-Nuplayer-启动流程
  8. ubuntu升级显卡驱动
  9. java 调查问卷_java学习调查问卷
  10. 什么是VMWare虚拟机
  11. php 前后端分离之rsa与des加密之旅
  12. Foxmail是什么邮箱?
  13. GNN手写字体识别java_深度之眼Paper带读笔记GNN.09.GGNN
  14. 小白入门篇:量化大神Eric跟你聊量化交易
  15. ggcor替代包:linkET,相关图,mantel test可视化
  16. R+中文︱中文文本处理杂货柜——chinese.misc
  17. DB2数据库的简单介绍和用法,编程序技巧
  18. 产品经理--商业模式画布
  19. 笔记本电脑 台式计算机类比推理,2020年广西公务员考试类比推理专项练习(47)...
  20. 《大话成像-图像质量检测》EMVA 1288: 6个重要图像质量测试指标

热门文章

  1. java spring 配置词典_java之spring mvc之拦截器
  2. mysql事务隔离级别详解_高性能MySQL-详解事务与隔离级别
  3. java装饰者模式讲解视频教程_java装饰者模式介绍(图文教程)
  4. 3-31Pytorch与auto-variabletensor
  5. C语言编写的函数怎么在C++中使用 extern C解析
  6. 华中科技大学计算机视觉张朋,管涛-华中科技大智能媒体计算与网络安全实验室...
  7. lombok依赖_公司来了个新同事不会用 Lombok,还说我代码有问题
  8. access 报表中序号自动_Access中自动编号的字段ID如何让它重新从初始值1开始编号...
  9. 解决django运行中连接mysql数据库超时报错pymysql.err.InterfaceError
  10. iris流程图_GitHub - LeoIris/vue: vue源码逐行注释分析+40多m的vue源码程序流程图思维导图 (diff部分待后续更新)...