初始化
基于 umijs[3.4.7]、swr[0.5.4]、antd[4.14.1]
# 使用国内源npm i yarn tyarn -g# 创建空目录mkdir myswr && cd myswr# 使用官方工具创建项目tyarn create @umijs/umi-app# 安装依赖tyarn# 安装 antd、swrtyarn add antd swr# 启动项目tyarn start
页面布局
代码
// src/index.tsximport useSWR from 'swr';import {Divider, Avatar, Skeleton} from 'antd';function fetchUser() {return fetch('api/user').then(res => (res.json()))}const MyAvatar = () => {const { data, error } = useSWR('/user', fetchUser);if (data && !error) {return (<Avatar src={data.avatar} />)}return (<Skeleton.Avatar active shape="circle" />)}const Content = () => {const {data} = useSWR('/user', fetchUser);return (<h1 style={{textAlign: 'center'}}>welcome {data && data.name ? data.name : '--'}</h1>)}export default function Index() {return (<div><div style={{textAlign: 'right', padding: '24px 24px 0 0'}}><MyAvatar /></div><Divider /><Content /></div>);}
mock 数据
// mock/index.tsexport default {'GET /api/user': (req: any, res: any) => {let timer = setTimeout(() => {res.send({name: 'liao',avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png'});}, 3000)}};
结果
user 接口只请求一次
