全局初始数据
上次修改时间:2021-05-07 15:43:50
简介
几乎大部分中台项目都有一个需求,就是在整个应用加载前请求用户信息或者一些全局依赖的基础数据。这些信息通常会用于 Layout 上的基础信息(通常是用户信息),权限初始化,以及很多页面都可能会用到的基础数据。
在中台最佳实践中,我们提供了一个极简的方式来初始化这部分数据,并且和 Layout 以及权限打通。该方案基于 umi 插件 @umijs/plugin-initial-state。
如何使用
初始化
在 umi 的运行时配置 src/app.ts
中添加运行时配置 getInitialState
,该配置是一个 async 的 function,示例如下:
export async function getInitialState() {
return {
userName: 'xxx',
};
}
在组件中消费
该方法返回的数据最后会被默认注入到一个 namespace 为 @@initialState
的 model 中。可以通过 useModel
这个 hook 来消费它:
import React from 'react';
import { useModel } from 'umi';
import { Spin } from 'antd';
export default () => {
const { initialState, loading, refresh, setInitialState } = useModel('@@initialState');
if (loading) {
return <Spin />;
}
return <div>{initialState.userName}</div>;
};
API:
返回值 | 类型 | 说明 |
---|---|---|
initialState | T | getInitialState 的返回值 |
loading | boolean | 是否处在加载状态 |
refresh | () => void | 重新执行 getInitialState 方法 |
setInitialState | (newState: T) => void | 手动设置初始值 |
相关 umi 插件
- plugin-model 配合 plugin-initial-state 可以快速在组件内获取到全局初始状态
- plugin-layout layout 中可以获取到 initialState 的状态,用于展示用户信息
- plugin-access plugin-access 中可以获取到 initialState 的状态,用于决定用户权限