一、Umi路由的概念

在 Umi 中,你可以在 config/config.js 文件中使用 routes 属性来配置路由。routes 属性是一个数组,每个元素都表示一个路由对象。每个路由对象都包含以下属性:

  • path:表示路由路径,可以是字符串或正则表达式。

  • component:表示路由组件的路径,可以是字符串或函数。

  • routes:表示当前路由的子路由,也是一个路由数组。

二、定义路由表

 config / config.js 文件内容如下:

  1. import { defineConfig } from "umi";
  2.  
  3. export default defineConfig({
  4. routes: [
  5. {
  6. path: "/",
  7. component: "Home/index"
  8. },
  9. {
  10. path: "/Home2",
  11. component: "@/pages/Home2/index",
  12. // 嵌套路由
  13. routes: [
  14. {
  15. path: "/Home2/one",
  16. component: "@/pages/Home2/one/index"
  17. },
  18. {
  19. path: "/Home2/two",
  20. component: "@/pages/Home2/two/index"
  21. },
  22. ]
  23. },
  24. ],
  25. npmClient: 'npm',
  26. });

三、在页面上引用

在 Umi 中,你可以使用以下方式在页面中引用路由组件:

  1. 使用 Link 组件来创建链接。

Link 组件可以用于创建内部链接,layouts / index.tsx 代码如下:

  1. import { Link, Outlet } from 'umi';
  2. import styles from './index.less';
  3.  
  4. export default function Layout() {
  5. return (
  6. <div className={styles.navs}>
  7. <ul>
  8. <li>
  9. <Link to="/">Home</Link>
  10. </li>
  11. <li>
  12. <Link to="/Home2">Home2</Link>
  13. </li>
  14. </ul>
  15. <Outlet />
  16. </div>
  17. );
  18. }

嵌套路由的用法也差不多,Home2 /  index.tsx 代码如下:

  1. import { Link, Outlet } from "umi";
  2.  
  3. export default function HomePage() {
  4. return (
  5. <div className="homebox">
  6. <div>
  7. <Link to="/Home2/one">one</Link>
  8. <Link to="/Home2/two">two</Link>
  9. </div>
  10. <div>
  11. <Outlet />
  12. </div>
  13. </div>
  14. );
  15. }
  1. 使用 history 对象来进行编程式导航。

history 对象可以用于在代码中进行导航,例如:

  1. import { history } from 'umi';
  2.  
  3. function MyComponent() {
  4. function handleClick() {
  5. history.push('/users');
  6. }
  7.  
  8. return (
  9. <div>
  10. <button onClick={handleClick}>Go to Users</button>
  11. </div>
  12. );
  13. }
  1. 在页面中使用 Route 组件来渲染路由组件。

Route 组件可以用于在页面中渲染路由组件,例如:

  1. import { Route } from 'umi';
  2.  
  3. function MyComponent() {
  4. return (
  5. <div>
  6. <Route path="/users" component={Users} />
  7. </div>
  8. );
  9. }
  10.  
  11. function Users() {
  12. return <div>Users Page</div>;
  13. }

需要注意的是,在使用 Route 组件时,需要将路由组件作为 component 属性的值传递给 Route 组件。此外,还需要在路由组件中添加 export default 来导出组件。

四、带参数的路由

4.1、路由表如下配置:

  1. export default {
  2. routes: [
  3. {
  4. path: '/',
  5. component: '@/pages/index',
  6. },
  7. {
  8. path: '/users',
  9. component: '@/pages/users/index',
  10. routes: [
  11. {
  12. path: '/users/:id',
  13. component: '@/pages/users/[id]',
  14. },
  15. ],
  16. },
  17. ],
  18. };

在上述代码中,我们定义了两个路由,一个是根路由 '/',另一个是 /users 路由。在 /users 路由下,我们定义了一个子路由 /users/:id,其中 :id 表示动态路由参数。

4.2、在页面上引用:

对于路由组件的引入,我们可以使用相对路径或绝对路径,例如:

  • 相对路径:'./users/index',表示在当前目录下的 users/index.js 文件中定义路由组件。
  • 绝对路径:'@/pages/users/index',表示在项目根目录下的 src/pages/users/index.js 文件中定义路由组件。

使用动态路由参数时,需要将路由组件使用方括号包裹起来,例如:

  • '/users/:id':表示动态路由参数为 id
  • '@/pages/users/[id]':表示路由组件为 src/pages/users/[id].js

4.2.1、方法一:在 Link 组件中使用动态路由参数。

例如,你可以在页面中使用 Link 组件来创建一个带参数的链接:

  1. import { Link } from 'umi';
  2.  
  3. function MyComponent() {
  4. const userId = 123;
  5.  
  6. return (
  7. <div>
  8. <Link to={`/users/${userId}`}>User Profile</Link>
  9. </div>
  10. );
  11. }

在上述代码中,我们将动态路由参数 userId 插入到链接中,以创建一个带参数的链接。

4.2.2、方法二:使用 history 对象来进行编程式导航。

例如,你可以在页面中使用 history.push 方法来进行编程式导航:

  1. import { history } from 'umi';
  2.  
  3. function MyComponent() {
  4. const userId = 123;
  5.  
  6. function handleClick() {
  7. history.push(`/users/${userId}`);
  8. }
  9.  
  10. return (
  11. <div>
  12. <button onClick={handleClick}>User Profile</button>
  13. </div>
  14. );
  15. }

在上述代码中,我们使用 history.push 方法来进行编程式导航,并将动态路由参数 userId 插入到路径中。

4.2.3、方法三:在页面中使用 Route 组件来渲染路由组件。

例如,你可以在页面中使用 Route 组件来渲染带参数的路由组件:

  1. import { Route } from 'umi';
  2.  
  3. function MyComponent() {
  4. return (
  5. <div>
  6. <Route path="/users/:id" component={UserProfile} />
  7. </div>
  8. );
  9. }
  10.  
  11. function UserProfile(props) {
  12. const userId = props.match.params.id;
  13.  
  14. return <div>User Profile for {userId}</div>;
  15. }

在上述代码中,我们使用 Route 组件来渲染带参数的路由组件,并在组件中通过 props.match.params.id 获取动态路由参数的值。

需要注意的是,在使用带参数的路由时,需要在路由配置中将动态路由参数使用冒号 : 来表示,例如 /users/:id。此外,在路由组件中获取动态路由参数的值时,可以使用 props.match.params 对象来获取参数的值。

五、约定式路由

约定式路由是一种基于约定的路由配置方式,它是一种常见的路由配置方式,也是 Umi 框架所采用的默认路由配置方式。在约定式路由中,路由配置信息是根据文件夹和文件名自动生成的,开发者只需要按照一定的命名规范来组织文件和文件夹,就可以自动生成对应的路由配置。

5.1、命名规范

在 Umi 中,约定式路由的命名规范如下:

  1. 页面文件命名

页面文件应该以 .js 或 .jsx 为后缀,并放在 src/pages 目录下。例如,src/pages/users.js 表示 users 页面的路由。

  1. 嵌套路由

如果需要定义嵌套路由,可以在页面文件所在的文件夹下创建一个名为 _layout.js 或 _layout.jsx 的文件来定义该文件夹下的路由。例如,你可以在 src/pages/users 目录下创建一个 _layout.js 文件来定义 /users 路由的布局。

  1. 动态路由

如果需要定义动态路由,可以将路由参数用 [] 包裹起来,并将其作为文件夹或文件名的一部分。例如,src/pages/users/[id].js 表示 /users/:id 路由。

  1. 嵌套动态路由

如果需要定义嵌套动态路由,可以在文件夹路径中使用多个动态参数。例如,src/pages/users/[id]/[post].js 表示 /users/:id/:post 路由。

使用约定式路由可以让开发者更加方便地定义应用程序的路由结构,同时也可以减少因手动配置路由而产生的错误。在 Umi 中,你可以通过配置式路由或混合式路由来覆盖默认的约定式路由配置。

5.2、举例说明

假设我们有一个企业级管理系统,其中包含了用户管理、角色管理、权限管理等功能模块。我们可以按照以下方式组织路由结构:

在上述目录结构中,我们按照 Umi 的命名规范,将页面文件放在 src/pages 目录下,并按照功能模块划分为 userrole 和 permission 三个文件夹。在每个文件夹下,我们创建了一个名为 index.js 的文件,表示该功能模块的默认路由,以及一些名为 [id].js 和 [id]/detail.js 的文件,表示该功能模块的动态路由和嵌套路由。

例如,src/pages/user/index.js 表示用户管理模块的默认路由,src/pages/user/[id].js 表示用户管理模块的动态路由,src/pages/user/[id]/detail.js 表示用户管理模块的嵌套路由。

通过这种方式,我们可以根据文件夹和文件名来自动生成路由配置,无需手动配置路由,从而提高开发效率。

需要注意的是,在实际开发中,我们可能还需要在每个页面文件中导出一个 React 组件或者一个函数组件,来实现页面的具体功能。例如,在 src/pages/user/index.js 文件中,我们可能会导出一个名为 UserList 的组件,用于展示用户列表。在 src/pages/user/[id]/detail.js 文件中,我们可能会导出一个名为 UserDetail 的组件,用于展示用户详情。

Umi配置路由的更多相关文章

  1. [SignalR]配置路由

    原文:[SignalR]配置路由 注册路由,在代码如下(SignalR 1.*): 脚本修改如下: 但是其官方文档解释是: By default, the route URL which client ...

  2. angular配置路由/子页面+vue配置路由/子页面

    1.在vue.js中组件可以复用,然后最近配置了几个子页面 在 这个文件中配置路由,子页面的配置跟其他一样,只不过path不同.   routes: [     { path: '/',       ...

  3. vue2.0配置路由

    配置路由之前,先检查vue版本,(案例适用vue2.0) 采用npm包的形式进行安装. 安装路由依赖:npm install vue-router(代码中,如果在一个模块化工程中使用它,必须要通过 V ...

  4. flutter 入口文件配置路由+加载页面

    入口文件配置路由 1.路由信息 -- 加载页面 ,通常用于显示新的内容或者广告,加载完成之后进入主页面 -- 主页面 /app 2.配置页面  main.dart main.dart // main ...

  5. Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面

    制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开 ...

  6. linux deb系 rpm系 配置路由

    deb: 添加默认路由:route add default gw 8.46.192.1 添加网段路由:route add -net 8.46.0.0/19 gw 8.46.192.1 删除路由:把 a ...

  7. urls.py的配置[路由配置]

    urls.py的配置[路由配置] Get请求与Post请求的方式 get请求: (1)地址栏输入url (2)<a href="请求url">点击</a> ...

  8. Windows两个网卡配置路由规则 同时访问内网和外网

    电脑上有两个网卡,一个有线一个无线,有线连局域网,无线连外网,虽然两个网都连着,但还是会出现访问不通的情况. 这就要求我们自己来配置路由规则,让内网的访问走内网的网卡,外网的访问走外网的网卡. 一.查 ...

  9. centos和ubuntu配置路由的三种方式

    本篇总结三种修改路由的方式:route, ip route, 以及通过修改文件来配置路由,前2种命令行形式适用于ubuntu和centos,重启失效,最后一种永久有效.     一. route命令 ...

  10. tp配置+路由+基本操作

    一.打开apache 的配置文件httpd_conf添加以下代码 <VirtualHost *:80>DocumentRoot "D:\wwwroot\thinkphp\publ ...

随机推荐

  1. 详解 Serverless 架构的 6 大应用场景

    导读 Serverless 架构将成为未来云计算领域重要的技术架构,将会被更多的业务所采纳.进一步深究,Serverless 架构在什么场景下有优秀的表现,在什么场景下可能表现得并不是很理想呢?或者说 ...

  2. GoLang 指针初探

    1. 内置类型和引用类型 Go 中内置类型包括数值类型,字符串类型和布尔类型.引用类型包括切片,映射,通道,接口和函数类型.其中,引用类型表示创建的变量包含一个指向底层数据结构的指针和一组管理底层数据 ...

  3. Angular系列教程之管道

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  4. 02-VS调试以及Qt基本使用

    VS调试以及Qt基本使用 1.汇编语言 1.1 VS中C语言嵌套汇编代码(了解) #include <stdio.h> int main() { //定义整型变量a, b, c int a ...

  5. css - 使用 figure 和 figcaption 快速实现 图片加文字的垂直方向的布局 ( 不支持ie9以下版本 )

    一,属性介绍 1. 浏览器支持 注释:Internet Explorer 8 以及更早的版本不支持 <figure> 标签.Internet Explorer 9, Firefox, Op ...

  6. Laravel - Eloquent 删除数据

        public function ormDelete()     {         # 1.通过模型删除         // $student = Student::where('id',5 ...

  7. Redis不同版本性能研究

    Redis不同版本性能研究 背景 前期同事遇到了一个大key的慢查询. 前提条件是: 一个 60万key的环境里面. 有一个 260万元素的set类型的key 产品经常会进行 smember key ...

  8. [转帖]如何监控Redis性能指标(译)

    Redis给人的印象是简单.很快,但是不代表它不需要关注它的性能指标,此文简单地介绍了一部分Redis性能指标.翻译过程中加入了自己延伸的一些疑问信息,仍然还有一些东西没有完全弄明白.原文中Metri ...

  9. [转帖]FIO 存储性能压测

    一. FIO简介 FIO 是一个多线程IO生成工具,可以生成多种IO模式(随机.顺序.读.写四大类),用来测试磁盘设备的性能.GFIO是FIO的图形监测工具,它提供了图形界面的参数配置,和性能监测图像 ...

  10. Redis scan等命令的学习与研究

    Redis scan等命令的学习与研究 摘要 背景跟前几天说的一个问题类似. 为了验证自己的设想, 所以晚上继续写脚本进行了一轮次的验证. 不过上次讨论时,打击好像都没听懂我说的 所以这次准备从基础开 ...