看一下umi的官网,你会发现约定路由的规则改了。
动态路由
约定 [] 包裹的文件或文件夹为动态路由。
比如:
src/pages/users/[id].tsx 会成为 /users/:id
src/pages/users/[id]/settings.tsx 会成为 /users/:id/settings
举个完整的例子,比如以下文件结构,
.
└── pages
└── [post]
├── index.tsx
└── comments.tsx
└── users
└── [id].tsx
└── index.tsx
之前是要在文件或文件夹前面加$,现在改成[]包裹的文件或文件夹
需要注意的是,满足以下任意规则的文件不会被注册为路由,
以 . 或 _ 开头的文件或目录
以 d.ts 结尾的类型定义文件
以 test.ts、spec.ts、e2e.ts 结尾的测试文件(适用于 .js、.jsx 和 .tsx 文件)
components 和 component 目录
utils 和 util 目录
不是 .js、.jsx、.ts 或 .tsx 文件
文件内容不包含 JSX 元素
等我按照规则建好文件后,发现动态路由没起作用。因为我忽略了这么一句话。
如果没有 routes 配置,Umi 会进入约定式路由模式,然后分析 src/pages 目录拿到路由配置。
这个routes配置在.umirc.ts文件里
.umirc.ts
import { defineConfig } from 'umi';
export default defineConfig({
routes: [{ path: '/', component: '@/pages/index' }],
});
它默认帮你配置了 routes,所以你得把routes: [{ path: ‘/’, component: ‘@/pages/index’ }]这行代码删掉,最后发现约定式路由起作用了^^
(说到umi的路由我就很气,因为之前我一直看的是umi2版本,但是我建的项目是3版本的,所以里面的约定路由死活弄不对,最后终于搞好了。)