前言

umi,中文可发音为乌米,是一个可插拔的企业级 react 应用框架。这个库入门的门槛比较高,umi是这个样子的,umi = react + redux + react-router + ts + dva + umi脚手架 + ant Design Pro + ant Design UI + umi-block。如果你没有丰富的react基础你来学习他或者是看懂它,那将是很困难的一件事,本博客则是尽量把用户当做小白进行入门,如果你依然觉得困难,那么抱歉本人只能做到这样了。轻喷...

在开始之前,你一定要有react的基础,不然你来了只是白来,因为即使项目跑起来了,你也看不懂代码。我猜你需要这个:react入门-React + webpack 开发单页面应用

快速上手

环境准备

首先得有 node,并确保 node 版本是 8.10 或以上。(mac 下推荐使用 nvm 来管理 node 版本)

$ node -v

8.1x

使用 npm

其官网建议使用的是yarn,但是本人用的是npm,所以全程npm,你需要适应我。

npm -v

全局安装 umi,并确保版本是 2.0.0 或以上。

$ npm global add umi

$ umi -v

2.0.0

创建 umi 项目

首先,找个地方建个空目录

$ mkdir my-umi-app && cd my-umi-app

然后使用 npm create umi 脚手架,创建模板:

$ npm create umi

# Choose ant-design-pro:

Select the boilerplate type (Use arrow keys)

❯ ant-design-pro - Create project with an layout-only ant-design-pro boilerplate, use together with umi block.

app - Create project with a simple boilerplate, support typescript.

block - Create a umi block.

library - Create a library with umi.

plugin - Create a umi plugin.

选择 ant-design-pro,是的,你没有猜错,我们并不按照套路来。

为何选择这个是有原因的,按照官网搭建出来的内容,相对我们要使用的项目还有很远的路要走,这个过程是持久且没有意义的,ant-design-pro则为我们提供了一个模板,我们在这个模板上进行开发。

问询 ? Which language do you want to use?,我们选择JavaScript,这是为了降低入门的门槛,所以这里决定使用js,如果你是大佬请忽视这个动作。

$ npm install # 安装依赖,时间比较久

$ npm start # visit http://localhost:8000

跑起来是这个样子的。你可以简单看看。

demo

你的项目目录是这个样子的:

├── config # umi 配置,包含路由,构建等配置

│ ├── config # 配置包含路由等

│ ├── ... # 其他

├── mock # 本地模拟数据

├── public

│ └── favicon.png # Favicon

├── src

│ ├── assets # 本地静态资源

│ ├── components # 业务通用组件

│ ├── e2e # 集成测试用例

│ ├── layouts # 通用布局

│ ├── models # 全局 dva model

│ ├── pages # 业务页面入口和常用模板

│ ├── services # 后台接口服务

│ ├── utils # 工具库

│ ├── locales # 国际化资源

│ ├── global.less # 全局样式

│ └── global.ts # 全局 JS

├── tests # 测试工具

├── README.md

├── package.json

└── ... # 其他

可用的脚本

npm start # 运行这个脚本会启动服务,自动打开默认浏览器展示你的页面。当你重新编辑代码后,页面还会自动刷新。

npm run build # 运行这个脚本将会编译你的项目,你可以在项目中的 dist 目录中找到编译后的文件用于部署。

npm run lint # 通过这个脚本来查看你的代码有哪些问题

npm test # 这个脚本会执行一系列测试,包括 e2e 测试。

npm run i18n-remove # 这个脚本将会尝试删除项目中所有的 i18n 代码,对于复杂的运行时代码,表现并不好,慎用。

你需要去这里简单看看有哪些脚本可以使用:可用的脚本

主要目录和文件介绍

config 目录

├── config # umi 配置,包含路由,构建等配置

│ ├── config # 配置文件:包含路由、样式、proxy等

│ ├── defaultSettings # 默认设置:包括标题title、navTheme等

│ ├── plugin.config # webpack的Plugin配置

│ ├── themePluginConfig # 风格主题的配置

src 目录

src/components组件目录

src/components/Authorized组件

授权组件,路由权限的管理。

关系:

index.jsx -> Authorized(内容权限管理) -> CheckPermissions

-> renderAuthorize(内容渲染)

-> Secured(判断是否拥有权限访问此 view 权限) -> CheckPermissions

-> CheckPermissions(通用权限检查方法) -> PromiseRender(promise渲染)

src/components/GlobalHeader组件

基础布局的头部,包含搜索、用户头像、语言切换。

├── src/components

├── ...

├── GlobalHeader # 基础布局的头部

│ ├── AvatarDropdown # 用户头像下拉菜单

│ ├── NoticeIconView # 通知图标和通知消息视图

│ ├── plugin.config # webpack的Plugin配置

│ ├── RightContent # 基础布局的头部核心:包含搜索、头像、语言选择

src/components/... 其他组件

HeaderDropdown:头部下拉菜单,用于用户头像、搜索等。

HeaderSearch:头部搜索组件。

NoticeIcon:头部通知组件。

PageLoading:加载组件。

SelectLang:语言切换组件。

src/layouts布局

src/layouts/BasicLayout布局

基础默认布局,菜单、顶部、内容、页脚。包含logo、菜单、面包屑等。

ant-design-pro的布局:

ant-design-pro的布局

src/layouts/SecurityLayout布局

安全布局,负责验证是否登录和登录后跳转加载,我们可以在这里写自己的登录认证规则。

src/layouts/... 其他布局

UserLayout: 用户布局,用于登录页。

BlankLayout: 空白布局,用于打印页面等不需要布局的页面。

src/locales

国际化资源语言,包含四种语言:简体中文、繁体中文、英语、葡萄牙语,如果使用国际化请注意它对诸如:菜单、消息提示等影响。如果你是国内用户,那么你可以忽略它。

src/models

全局 dva model

在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的:

1.UI 组件交互操作;

2.调用 model 的 effect;

3.调用统一管理的 service 请求函数;

4.使用封装的 request.ts 发送请求;

5.获取服务端返回;

6.然后调用 reducer 改变 state;

7.更新 model。

至于dva是什么?请看这里:dva.js

这里我们只需要知道它里面的文件内容如下即可:

// model

{

namespace: String, // 命名空间

state: Object, // 状态

reducer: Object, // 同步更新 state

effects: Object, // 副作用:处理异步逻辑

subscriptions: Object // 订阅数据源

}

这些文件被引用在src/pages/.umi/dva中。

我们以 models/global 为例:

namespace: 'global' 说明以下此处的dva命名空间为 global,即你调用的时候需要采用 global.XXX 的形式

其中的 state: {} 是存放状态的,也就是数据。

reducers 是用来更新 state 的,但是他只能是同步的。所以我们需要 effects 来进行异步更新。

即:

state: {

collapsed: false,

notices: [],

}, // 存放状态和数据

reducers: { // 用来同步设置state

changeLayoutCollapsed(

state = {

notices: [],

collapsed: true,

},

{ payload },

) {

return { ...state, collapsed: payload };

},

saveNotices(state, { payload }) {

return {

collapsed: false,

...state,

notices: payload,

};

},

// ...

}

effects: { // 异步更新state,通过调用同步的reducers实现

*fetchNotices(_, { call, put, select }) {

const data = yield call(queryNotices);

yield put({

type: 'saveNotices',

payload: data,

});

const unreadCount = yield select(

state => state.global.notices.filter(item => !item.read).length,

);

yield put({

type: 'user/changeNotifyCount',

payload: {

totalCount: data.length,

unreadCount,

},

});

},

// ...

}

src/pages

业务页面和常用模板

src/pages/document.ejs 默认html模板,umi 约定如果这个文件存在,会作为默认模板,内容上需要保证有

user user业务逻辑内容,里面包含login登录模块,如果你需要更换登录页,请在这里处理。

通过 umi block add [block url] --path=[target path] 添加的区块,将会被放置在pages目录下。至于这个命令是做什么的,我们目前先不做理会。后面我会详细说明。

src/services

服务请求层,在 Ant Design Pro 中,后台接口服务需要写在services文件下。当然你也可以不那么做。

例如登录的请求:

import request from '@/utils/request';

export async function fakeAccountLogin(params) {

return request('/api/login/account', {

method: 'POST',

data: params,

});

}

export async function getFakeCaptcha(mobile) {

return request(`/api/login/captcha?mobile=${mobile}`);

}

不需要国际化

大多数国内用户是不需要国际化这种东西的,一次我们需要移除它。

首先,使用umi自带的移除国际化的脚本。

npm run i18n-remove

这时已经从系统级别移除了国际化的内容,但是依然剩余了很多没有用的文件和代码,需要我们手动进行处理。

再手动删除 src/components/SelectLang 、 src/locales 、 src/pages/user/login/locales 文件夹。

再从 src/components/GlobalHeader/RightContent 和 src/layouts/UserLayout 文件中移除关于 src/components/SelectLang 组件的引用。如下图:

src/components/GlobalHeader/RightContent

src/layouts/UserLayout

再从 src/layouts/UserLayout.less 中移除lang的样式:

src/layouts/UserLayout.less

完成后,我们的初始化就结束了。

结语

至此,一个初始可用的基于ant-design-pro的umi项目就构建且说明完成了,接下来就是根据这个umi项目去实战umi官网上的指南了。

提示:后面还有精彩敬请期待,请大家关注我的专题:web前端。如有意见可以进行评论,每一条评论我都会认真对待。

ant design入门_Umi + ant Design Pro最简单的入门教程(一)初相关推荐

  1. ant读书之使用ant进行java开发--第二章

    2019独角兽企业重金招聘Python工程师标准>>> 几条总结: 一.在ant的构建文件中,根元素始终是:<project> 二.ant的概念模型:项目包含目标,目标包 ...

  2. ant接口自动化 junit_Jenkins + Ant自动运行Junit测试

    自动化测试脚本需要频繁执行,也可能需要定时执行,执行的方法可能有很多种,下面我们来讲讲怎么使用Jenkins+Ant的方式来执行用例. 一.使用工具 Jenkins Ant Junit 二.Ant T ...

  3. linux ant脚本,linux下ant jmeter自动化测试

    1.借助badboy工具进行Jmeter的脚本录制; 2.在Jmeter的图形界面下进行脚本调整和增加理想的监听器; 3.linux下正确安装ant和Jmeter 4.书写ant的执行脚本build. ...

  4. ant 路径_在Ant中显示路径

    ant 路径 在博客文章Java and Ant Properties Refresher和Ant <echoproperties /> Task中 ,我写了一篇关于如何了解Ant构建如何 ...

  5. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. pro unity xl编程手册_施耐德Unity Pro XL编程使用入门

    施耐德Unity Pro XL编程使用入门 总记录数 5 总页数 1 当前页 1 931 4 | 2009-06-16 064722 1楼 abysmal 先支持一下. 可是图呢为什么没有图 | 20 ...

  7. cut final pro入门教程_Final Cut Pro X视频教程 fcpx入门到精通自学零基础剪辑教材

    Final Cut Pro X视频教程 fcpx入门到精通自学零基础剪辑教材 Final Cut Pro X在视频剪辑方面进行了大规模更新,新的Magnetic Timeline"磁性时间线 ...

  8. pro unity xl编程手册_施耐德Unity Pro XL编程使用入门.pdf

    施耐德Unity Pro XL编程使用入门 · 有奖征文 · 专业图书 Unity Pro XL 编程指导 fulanglong 建议删除该贴!! | 收藏 | 回复 | 2009-06-15 16: ...

  9. Android Design Support Library 中控件的使用简单介绍(一)

    Android Design Support Library 中控件的使用简单介绍(一) 介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android ...

  10. java ant构件下载_Apache Ant对决Make:实战Java构建工具

    [IT168 专稿]一谈到英语单词Ant,人们很自然的想到蚂蚁.而一谈到另一个单词Make,人们也会很自然想到构建工具.有谁会将这两个词关联起来呢?那么Ant究竟有什么神奇之处呢?本文会为您揭晓答案. ...

最新文章

  1. zhcon解决Ubuntu命令行模式乱码问题
  2. python写自动答题脚本_问卷星的自动答题脚本
  3. MySQL工作中的实际用_数据库在工作中的应用,以及什么是MySQL?
  4. release,debug库互调用,32位,64位程序与库互调用
  5. 基于马克思哲学原理论外在美与内在美2017-12-31
  6. Python3字符串填充和对齐代码示例
  7. 动态规划—最小路径和
  8. linux中call命令,各种linux命令(pwn)
  9. Java中获取当前函数名
  10. Ehcache配置文件加载方式
  11. 与图片相关的几个库的编译
  12. Amazon.com 和 store.apple.com 哪个的购物体验更好?
  13. 【渝粤教育】国家开放大学2018年秋季 2586T城市轨道交通车站设备 参考试题
  14. 关于SQL Server将一列的多行内容拼接成一行的问题讨论
  15. tomcat设置错误页面
  16. CTFHUB刷题 密码口令/默认口令
  17. Angular国际化中ngx-translate使用
  18. python非法的标识符_Python标识符
  19. Unity 通过代码修改材质球属性
  20. 团建活动随感(r11笔记第9天)

热门文章

  1. 一起来学习Windows Mobile 6.5
  2. 工作范围说明书与需求说明书
  3. st7789 旋转_玩转 ESP32 + Arduino(二十八) TFT_eSPI库驱动ST7789
  4. ROS dst-nat端口映射限制访问映射IP
  5. android手机恢复出厂设置,手机强制恢复出厂设置方法
  6. 人工神经网络——神经元模型介绍
  7. 手机计算机文件夹加密文件,如何给手机以及电脑文件加密?
  8. 简单的方法破解百度网盘上带密码的学习视频资源
  9. ArcGIS 几何校正
  10. C语言也能干大事第十二节(如鹏基础)