目录
一、运行时配置
1.1 配置方式
1.2 常用配置项
1.3 关于运行时配置说明
二、使用Umi UI
2.1 Umi UI的特性
2.2 项目中安装Umi UI
2.3 使用Umi UI
三、Umi JS总结
3.1 路由状态管理
3.2 配置代理
3.3 封装requset
一、运行时配置
运行时配置和配置的区别是他跑在浏览器端,基于此,我们可以在这里写函数、jsx、import浏览器端依赖等等,但是不要在这里引入node依赖。
1.1 配置方式
约定写在src/app.tsx文件夹为运行时配置。
1.2 常用配置项
(1)动态修改路由patchRoutes({ routes })—路由权限管理
比如在最前面添加一个 /foo
路由,
export function patchRoutes({ routes }) {
routes.unshift({
path: '/foo',
exact: true,
component: require('@/anth/foo').default,
});
}
比如和 render
配置配合使用,请求服务端根据响应动态更新路由
let extraRoutes;
export function patchRoutes({ routes }) {
//合并服务端返回的路由
extraRoutes.map(item => {
routes.unshift({
path: item.path,
component: require(`@/pages${item.component}`).default
})
})
}
// 覆写render会在patchRoutes之前执行
export function render(oldRender) {
// 模拟从服务器端获取数据
extraRoutes=[
{path: '/server', component: 'user'}
]
// 渲染之前,做一些权限校验
fetch('/api/auth').then(auth => {
if (auth.isLogin) { oldRender() }
else {
history.push('/login');
oldRender()
}
}
注意:
(2)render(oldRender:Function)—路由权限校验
在patchRoutes之前执行
import { history } from 'umi';
export function render(oldRender) {
fetch('/api/auth').then(auth => {
// 如果用户没有登陆,跳转到登陆页面
if (auth.isLogin) { oldRender() }
else {
history.push('/login');
oldRender()
}
});
}
(3)onRouteChange({ routes, matchedRoutes, location, action })在初始加载和路由切换时做一些事情
在patchRoutes之后执行
比如用于做埋点统计
export function onRouteChange({ location, routes, action }) {
bacon(location.pathname);
}
比如用于设置标题
export function onRouteChange({ matchedRoutes }) {
if (matchedRoutes.length) {
document.title = matchedRoutes[matchedRoutes.length - 1].route.title || '';
}
}
1.3 关于运行时配置说明
- 上述配置项只是UmiJS在运行时配置的常用配置项,当然还有其他配置项
- Umi 允许插件注册运行时配置,如果你使用插件,肯定会在插件里找到更多运行时的配置项(每一个插件也会有自己的配置项)
运行时配置https://v3.umijs.org/zh-CN/docs/runtime-config
二、使用Umi UI
2.1 Umi UI的特性
- 项目管理。集中式管理本地项目。
- 配置管理。umi / bigfish 常用项目配置。
- 任务管理。集成启动、构建、测试、代码规范检查、重新安装依赖等常用操作。
- 资产、区块管理
2.2 项目中安装Umi UI
在项目中使用命令
下载Umi UI依赖:yarn add @umijs/preset-ui -D
使用Umi UI:UMI_UI=1 umi dev
(注意:这里如果出现无法识别UMI_UI,可以将他配置到package.json中)
"scripts": {
"start:umi-ui": "set UMI_UI=1 && umi dev",
},
2.3 使用Umi UI
在上述步骤安装成功后,我们访问我们本地的8000接口,在右下角会出现一个按钮,点击他即可使用Umi UI。
三、Umi JS总结
看到这里,我们的UmiJS的学习也要告一段落了,但是在实际开发过程中,为了让项目结构更加清晰,我们都会将我们的代码根据功能进行文件区分,然后以引入的方式使用。
在UmiJS配置相关介绍中我们知道:UmiJS的配置是在.umirc.js或者config/config.ts中配置的,所以我们将.umirc.js中的配置分出来。注意:.umirc.js的优先级是高于config/config.ts的,所以我们要将.umirc.js删掉,重新配置config/config.ts。
3.1 路由状态管理
config/routes.ts(专门存放路由)
export default [
{
name: '注册页',
path: '/userregister',
component: './UserRegister',
},
{
path: '/',
component: '@/layouts/LayoutSide/index',
routes: [
{
name: '空白页面',
path: '/user',
component: './User',
},
{
path: '/',
component: '@/pages/index',
},
],
},
]
config/config.ts(引入路由)
import routes from './routes'
3.2 配置代理
config/proxy.ts(专门存放代理相关)
export default {
//dev环境
dev: {
proxy: {
'/api': {
'target': 'http://jsonplaceholder.typicode.com/',
'changeOrigin': true,
'pathRewrite': { '^/api' : '' },
},
},
}
//test环境
test: {
proxy: {
'/api': {
'target': 'http://jsonplaceholder.typicode.com/',
'changeOrigin': true,
'pathRewrite': { '^/api' : '' },
},
},
}
}
config/config.ts(引入)
import proxy from './routes'
export default defineConfig({
proxy: proxy[APP__ENV || 'dev'],
});
3.3 封装requset
由于request这个插件,我们可能会在多出使用到他,并且会用到拦截器、错误处理的相关东中间件,所以我们将他预先封装起来,方便我们后续使用
GitHub - umijs/umi-request: A request tool based on fetch.A request tool based on fetch. Contribute to umijs/umi-request development by creating an account on GitHub.https://github.com/umijs/umi-request#interceptor
src/utils/request.ts
import request from "umi-request"
import { message } from "antd"
// 请求拦截器
request.interceptors.request.use((url, options) => {
return {
url: `${url}&interceptors=yes`,
options: { ...options, interceptors: true },
};
});
// 响应拦截器
request.interceptors.response.use(response => {
const codeMaps = {
502: '网关错误。',
503: '服务不可用,服务器暂时过载或维护。',
504: '网关超时。',
};
message.error(codeMaps[response.status]);
return response;
});
export default request
到此为止,关于UmiJS的初步了解我们也就结束了,之后会跟大家分享Antd Pro相关内容,并且最后也会做一个完整的项目,相当于练手,大家敬请期待!!!