在《Umi 小白纪实(一)》中有提到过简单的路由配置和使用,但这只是冰山一角

借用一句广告词,Umi 路由的能量,超乎你的想象

一、基本用法

Umi 的路由根结点是全局 layout  src/layouts/index.js

路由会将相应的页面组件映射到上面的 props.children 中

之前的文章介绍过,Umi 的路由可以通过.umirc.js文件中的 routes 字段配置

但配置 routes 字段后,约定式路由不会生效。如果项目较重,就需要配置很多路由,所以我更倾向于使用约定式路由

Umi 可以基于 pages 目录下的结构,自动生成路由配置,这就是约定式路由

比如上图的目录结构,最终会被 Umi 解析为

[

{ path:'/', component: './pages/index.jsx'},

{ path:'/users/', component: './pages/user/index.jsx'},

{ path:'/users/list', component: './pages/user/detail/index.jsx'},

]

二、动态路由

假如有某一个表单页,需要区分新增(add)和编辑(edit)两种状态,这时候就可以采用动态路由

umi 里约定,带 $ 前缀的目录或文件为动态路由

然后在对应的组件中,通过props.match.params来获取路由中的动态参数

再来一个需求:假如有一个 tab 菜单页,进入该页面时可以指定某个菜单,如果没有指定则展示第一个菜单

这时候就可以使用可选的动态路由,umi 里约定带 $ 后缀的动态路由为可选动态路由

然后同样通过props.match.params 来获取动态参数

这样访问 /user/:id/list 和 /user/list 都能访问到该页面

三、嵌套路由

umi 约定目录下有 _layout.js 时会生成嵌套路由,以_layout.js 为该路由的根结点

如上图的结构,在访问 /user/detail/count/ 和 /user/detail/info/ 的时候都会以 _layout.js 生成二级路由

但在切换子路由,当前的滚动条并不会变化,如果希望切换子组件之后回到顶部,可以在 _layout.js 的 componentDidUpdate 中添加相应的逻辑

componentDidUpdate(prevProps) {if (this.props.location !==prevProps.location) {

window.scrollTo(0, 0);

}

}

PS: _layout.js 也可以是 _layout.jsx,上面的全局 layout 同理

四、通过 yaml 注释扩展路由

以上其实都是一些基本的路由功能,虽然以约定目录的方式实现了这么完善的路由功能还是很令人赞叹,但还称不上“震惊”二字

真正让我佩服到五体投地的东西,从这里开始...

约定式路由虽然能节省冗杂的路由配置,但也不如直接配置routes来的灵活

Umi 的解决方案是,通过 yaml 注释来扩展约定式路由的功能

Umi 约定路由文件的首个注释如果包含 yaml 格式的配置,则会被用于扩展路由

比如修改页面的 title,可以直接通过添加 yaml 注释搞定

所有 routes 字段可以配置的参数,都可以通过注释来扩展

这个功能为完善路由组件的功能提供了基础,比如权限路由

如果项目需要校验权限,比如用户是否登录,只需在需要校验权限的组件顶部添加注释

/**

* Routes:

* - ./src/routes/private.jsx*/

这样一来,当前组件就会作为子组件嵌套在 private.jsx 中

然后在 private.jsx 中添加校验权限的逻辑

五、基于路由的按需加载

约定式路由结合注释之后,就会生成完整的路由配置,可以在页面组件上通过props.route.routes获取到

再结合其它插件就可以实现面包屑、切换动效等,这些就功能不展开说了。

但 Umi 还在看不见的地方,利用路由做了很多优化,比如按需加载

//.umirc.js

export default{

plugins: [

['umi-plugin-react', {

dynamicImport:true,

}],

],

};

对于开发人员来说,只需要添加以上配置就能开启按需加载

开启之后,假如有 1000 个页面,调试时只要调其中的 5 个页面,最终就会只编译这 5 个页面

而 Umi 是如何做到的呢?他们使用了临时文件来占位

在访问 url 的时候,只会加载当前的组件,其它路由组件都用 Loading 组件占位

虽然有些取巧,但简单有效

路由还有一些正在完善的功能,比如 keep-alive、AntD+路由自动生成菜单,最新的进展可以关注 Umi 的官方仓库

umi权限路由_Umi 小白纪实(三)—— 震惊!路由竟然如此强大!相关推荐

  1. umi权限路由_umi 入门之项目配置

    umi 项目配置 一.运行配置 约定src/app.tsx为运行配置 配置项目 1.patchRoutes 修改路由,可获得整个路由系统 export function patchRoutes({ r ...

  2. Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法

    创建控制器: php artisan make:controller Admin/IndexController 创建Middleware: php artisan make:middleware T ...

  3. Vue2.0 + ElementUI 手写权限管理系统后台模板(三)——页面搭建

    框架布局 本章只介绍基础布局,和一些主要的js,页面上基本上都是些交互事件,项目代码上都有注释,不懂的地方debug跑一变就知道了,只是这些事件基本上没有独立存在的,相互之间都有关联 框架风格 新建页 ...

  4. vue路由守卫有哪三种类型

    vue中路由守卫一共有三种,分别为:全局路由守卫(全局前置守卫.全局后置守卫),组件内路由守卫,路由独享守卫(是在路由配置页面单独给路由配置的一个守卫). 路由守卫,也可以是路由拦截,我们可以通过路由 ...

  5. Telnet,命令级别,DHCP (动态主机配置协议),DHCP租期, 地址池,全局配置,接口配置,DHCP中继代理,网络三要素,路由项匹配算法

    Telnet Tcp协议 自带mac 缺少ip 手动配置ip 客户端配置: System-view //进入系统模式 interface GigabitEthernet 0/0/0 //进入端口 ip ...

  6. oracle 授权 增删改查权限_linux suid,sgid,sticky-bit三种特殊权限简介

    三种特殊权限简介 SUID 当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权. 如果所有者是 root 的话,那么执行人就 ...

  7. vue 函数 路由跳转_vue中通过路由跳转的三种方式

    router-view 实现路由内容的地方,引入组件时写到需要引入的地方 需要注意的是,使用vue-router控制路由则必须router-view作为容器. 通过路由跳转的三种方式 1.router ...

  8. 初识OSPF(三)——路由重分发及虚链路

    初识OSPF(三)--路由重分发及虚链路 前言 一.路由重分发 1.理解路由重分发 2.路由重分发的考虑 3.重分发到OSPF域中路由的路径类型 4.配置命令 二.NSSA区域 1.NSSA 2.配置 ...

  9. vue路由传参的三种基本方式 - 流年的樱花逝 - SegmentFault 思否

    现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据. 父组件中: <li v-for="article in articles" @click= ...

最新文章

  1. 《阿里巴巴JAVA开发手册》发布详尽版,新增16条设计规约
  2. Django之 RESTful规范
  3. IAR下STM32工程建立基本步骤
  4. SSM+基于微信小程序的航空售票管理系统 毕业设计-附源码191111
  5. 待忧伤开满山岗,等青春散场
  6. 爬取虎扑社区-晒晒照片
  7. 小程序第三方微信授权登录的实现
  8. 洗扑克牌(乱数排列)(c/python略)
  9. dw如何制作图片自动切换效果_dw怎么用css做图片轮播
  10. 中国35岁以上的程序猿哪去了?,基于android的app开发详细步骤
  11. 内容超出div,设置滚动条
  12. Vue商城项目(篇5)购物车页面
  13. There is no getter for property named ‘*‘ in ‘class
  14. HD OJ 题目分类
  15. 图像处理去噪点(中值滤波)java
  16. Python 2-05 高阶函数
  17. 北大青鸟 php,PHP技术北大青鸟计算机职业培训
  18. 【程序人生】如何学习Windows编程?
  19. AI教程!教你绘制扁平化风格的卡通人物肖像(四人组合篇)
  20. Android-IM即时通讯:环信

热门文章

  1. JS实现刷新iframe的方法
  2. cocos2d-x打包后手机运行闪退_三国志11手机版,问题解决手册 1.4.4版本
  3. linux命令去除重复的值,学习linux的Split 命令-linux下去除重复的命令uniq用法...-linux下join与paste命令的用法_169IT.COM...
  4. 北大文科生能选计算机专业么,文科计算机基础和文科计算机专题
  5. 软件包管理器(树链剖分)
  6. pandas删除数据库 python_Python常见的科学计算库
  7. c语言绝对循环,c语言之循环
  8. html中从下往上遮罩效果,css制作从下往上逐渐显示的div
  9. 如何在Ubuntu系统下搭建Android开发环境
  10. PyTorch Tutorial