umi使用记录

1.umi是什么?

他是“蚂蚁金服的底层前端框架”		
他包含了路由、部署、测试等一些列功能的企业级的可扩展的前端底层框架

2.环境

// 创建项目

$ yarn create @umijs/umi-app

// 安装依赖

$ yarn

// 启动项目

$ yarn start

// 构建

$ yarn build

// 本地验证服务

$ yarn global add serve
serve ./dist

3.目录

├── package.json
├── .umirc.ts
├── .env
├── dist
├── mock
├── public
└── src
| ├── .umi
| ├── layouts/index.tsx
| ├── pages
| | ├── index.less
| └── index.tsx
| └── app.ts

.umirc.ts

配置文件,包含 umi 内置功能和插件的配置。

.env

环境变量。

比如:

PORT=8888
COMPRESS=none

public 目录

静态文件,此目录下所有文件会被 copy 到输出路径。

src 目录

.umi 目录

临时文件,入口文件、路由等都会被临时生成到这里。不要提交该文件,该文件会在启动和构建时重新生成。

layouts/index.tsx

约定式路由时的全局布局文件。

app.ts

运行时的配置文件,可以在这里扩展运行时的能力,比如修改路由、修改 render 方法,请求拦截等。

4.配置

包括路由,代理,假数据,布局,主题,加密,一些umi内置的配置等等都在这里配置。

可以在**.umirc.ts文件配置,也可以在config/config.ts**中配置,一般项目比较复杂的话可以在config里面配置,可以不要.umirc.ts文件。

.umirc.ts文件中配置
在这里插入图片描述

config中配置,
在这里插入图片描述

5.运行时配置(src/app.tsx)

umi约定src/app.tsx中的配置为运行时配置,一般可以引入一些浏览器依赖,可以再这里拦截路由,拦截请求等等
在这里插入图片描述

6.路由

配置路由

路由
在 .umirc.ts 或 config/config.ts文件中配置路由。

如果项目的配置不复杂,推荐在 .umirc.ts 中写配置;如果项目的配置比较复杂,可以将配置写在 config/config.ts 中,并把配置的一部分拆分出去,比如路由配置可以拆分成单独的 routes.ts

export default {
  routes: [
    { path: '/login', component: 'login' },
    {
      path: '/',
      component: '@/layouts/index',
      routes: [
        { path: '/list', component: 'list' },
        { path: '/admin', component: 'admin' },
      ],
    }, 
  ],
}
路由跳转
import { history } from 'umi';
history.push('/login');
history.replace('/login');
history.goBack();
路由参数

从组件的props中可以获取一下参数

  • match:包含params、url、path、isExact,路由,参数等
  • location:包含pathname、search、query,params,路由名,参数等
  • history:当前进入路由使用的action(如"PUSH"),以及umi路由history的一些#api
  • route:当前路由配置
  • router:全部路由配置

路由传参:
history.push(’/detail/123234’); 这样传参,参数在props.match.params
history.push({pathname: ‘/detail’, query:{id: 12334}}); 参数在props.location.query

约定式路由

无需routers配置,通过分析src/pages文件下目录和文件,自动生成路由的方式叫做约定式路由,或者文件路由。

无嵌套无参数的路由

目录:
├── pages
| ├── index.tsx
| └── users.tsx
路由:

[
  { exact: true, path: '/', component: '@/pages/index' },
  { exact: true, path: '/users', component: '@/pages/users' },
]
有嵌套的路由

子目录下有_layout.tsx文件,才会生成嵌套路由, layout 文件需要返回一个 React 组件,并通过 props.children 渲染子组件。

目录:
├── pages
| ├── users
| | ├── layout.tsx
| | ├── index.tsx
| | └── list.tsx
路由:

[
  { exact: false, path: '/users', component: '@/pages/users/_layout',
    routes: [
      { exact: true, path: '/users', component: '@/pages/users/index' },
      { exact: true, path: '/users/list', component: '@/pages/users/list' },
    ]
  }
]

全局的layout, 约定 src/layouts/index.tsx 为全局路由。返回一个 React 组件,并通过 props.children 渲染子组件。

目录:
.
└── src
├── layouts
│ └── index.tsx
└── pages
├── index.tsx
└── users.tsx

路由

[
  { exact: false, path: '/', component: '@/layouts/index',
    routes: [
      { exact: true, path: '/', component: '@/pages/index' },
      { exact: true, path: '/users', component: '@/pages/users' },
    ],
  },
]

一个自定义的全局 layout 如下:

import { IRouteComponentProps } from 'umi'
export default function Layout({ children, location, route, history, match, }: IRouteComponentProps) {
  return children
}
有参数的路由(动态路由)

目录:
└── pages
│ ├── index.tsx
│ ├── users
│ ├── [id].tsx
│ └── [name$].tsx

路由:

[
  { exact: true, path: '/', component: '@/pages/index' },
  { exact: true, path: '/users/:id', component: '@/pages/users/[id]' },
  { exact: true, path: '/users/:name?', component: '@/pages/users/[[name$]]' }
]

7.插件

umi有很多的插件,比如@umijs/plugin-initial-state、@umijs/plugin-access、@umijs/plugin-request、@umijs/plugin-model、@umijs/plugin-sass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值