# umi-basic-2206 **Repository Path**: connerljlx_admin/umi-basic-2206 ## Basic Information - **Project Name**: umi-basic-2206 - **Description**: 2206班umi基础 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-02-22 - **Last Updated**: 2023-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 启动umi项目 ```js npx create-umi@latest ``` # 运行项目 ```js npm run dev ``` # 修改 启动端口 package.json ```json "dev": "set PORT=8888 && umi dev", ``` # 项目目录结构 ``` src .umi // 目录开发时 产生临时文件存储目录 不要动不要动 config config.ts // umi配置文件 和 根目录下 .umirc.ts二选一 assets // 开发时存储静态资源的目录 layouts // 根组件 一级路由出口在这里 pages // 路由组件的目录 .umirc.ts // umi配置文件 和 根目录下 config/config.ts二选一 ``` # 路由 + 约定式路由 无需定义路由 只需要在 pages中 定义 路由组件即可,自动生成 路由 ```js pages index.tsx news.tsx // 自动生成两个路由 [ { path: '/', component: '@/pages/index' }, { path: '/news', component: '@/pages/news' } ] ``` 路由组件如果定义成目录 但是 对应组件 命名一定是index ```js pages index.tsx news index.tsx // 自动生成两个路由 [ { path: '/', component: '@/pages/index' }, { path: '/news', component: '@/pages/news' } ] ``` ```js pages index.tsx news index.tsx a.tsx // 自动生成两个路由 [ { path: '/', component: '@/pages/index' }, { path: '/news', component: '@/pages/news' }, { path: '/news/a', component: '@/pages/news/a' } ] ``` ### 配置型路由 + 路由基础 ```js { path: '/', component: 'home' // 自动去pages中查找 home.tsx 或者 home/index.tsx }, { path: '/news', component: 'news', // 定义子路由 子路由 组件一定要存储在 父路由组件 目录中 routes: [ { path: '/news/native', component: 'native', // 支持写法三种 1直接子路由组件名 2/news/native 3 @/pages/news/native } ] } // 配置子路由一定要在 父路由中 定义 Outlet组件作为出口 ``` + 路由重定向 ```js { path: '/', redirect: '/home' } ``` + 路由wrappers 包裹路由, 访问目标路由组件之前,会先 访问 wrappers中的组件 实现原理: 将 目标路由组件 包装成了 wrappers中的 组件的 子路由组件 wrappers中的组件 如果定义了 Outlet则 目标路由组件正常渲染,否则不渲染 使用场景: 常用语 做登录鉴权 ```js { path: '/about', wrappers: [ '@/wrappers/auth' ], component: 'about' } ``` 在 src/wrappers/auth 组件 ```js import React from 'react' import { Outlet, Navigate } from 'umi' import { isLogin } from '@/utils' export default function auth() { return (