01 基于umi搭建React快速开发框架
介绍
基于umi搭建一个快速开发框架,react 应用框架。umi 以路由为基础的,支持类 next.js 的约定式路由,以及各种进阶的路由功能,并以此进行功能扩展,比如支持路由级的按需加载。
我们会在基于umi的基础上,开发出一个框架通用功能和业务功能
框架功能列表
- 全局layout
- 权限管理
- 封装列表增删改查
- 国际化
- 集成 g2 chart图表
- 集成 socket.io
- ....(后续补充)
业务功能
- 用户管理
- ....(后续补充)
创建项目
umi 提供了脚手架供我们快速创建项目。参考umi脚手架创建项目
包管理器我们推荐用yarn来替换npm,yarn在包安装速度上确实提升不少
1.在你的空目录下执行,
yarn create umi
我们需要选择 antd,code splitting, dll, hard source
2.安装依赖
yarn
3.启动本地开发
yarn start
构建全局layout和菜单
umi规定 src/layouts 目录下存放我们全局layout组件, 在index.js中加入代码如下
class BaseLayout extends React.Component {
state = {
collapsed: false,
};
onCollapse = (collapsed) => {
console.log(collapsed);
this.setState({ collapsed });
}
render() {
return (
<Layout style={{ minHeight: '100vh' }}>
<Sider
collapsible
collapsed={this.state.collapsed}
onCollapse={this.onCollapse}
>
<div className={styles.logo} />
<MenuComponent />
</Sider>
<Layout>
<Header style={{ background: '#fff', padding: 0 }} />
<Content style={{ margin: '0 16px' }}>
<Breadcrumb style={{ margin: '16px 0' }}>
<Breadcrumb.Item>User</Breadcrumb.Item>
<Breadcrumb.Item>Bill</Breadcrumb.Item>
</Breadcrumb>
<div style={{ padding: 24, background: '#fff', minHeight: 360 }}>
{this.props.children}
</div>
</Content>
<Footer style={{ textAlign: 'center' }}>
Ant Design ©2018 Created by Ant UED
</Footer>
</Layout>
</Layout>
);
}
}
export default BaseLayout;
layout 组件需要 MenuComponent,
在构建组件之前我们需要先mock菜单数据,umi支持mock,我们在mock文件下添加 auth.js
const menu = [
{
id: 1,
name: '概览',
icon: 'dashboard',
url: '/dashboard',
},
{
id: 2,
name: '系统管理',
icon: 'setting',
url: '/system',
children: [
{
id: 21,
name: '用户管理',
icon: 'user',
url: '/system/user',
}
]
},
];
menu数据是树形结构,在项目当中,可以构造放到前台,也可以让后台小伙伴们返回。比较灵活,我们基于数据去做渲染就行。
还有一个很重要的概念,umi也集成了dva,我们的src/models路径下添加auth.js的如下。
import { getMenu } from '../services/auth';
export default {
namespace: 'auth',
state: {
menu: []
},
effects: {
*getMenu(_, { put, select, call }) {
const menu = yield call(getMenu);
yield put({
type: 'setMenu',
payload: menu,
});
},
},
reducers: {
setMenu(state, { payload }) {
return {
...state,
menu: payload,
};
},
},
};
基础工作已经完成。就可以来构建MenuComponent组件。
@connect(({auth}) => {
return {
menu: auth.menu,
}
})
class MenuComponent extends React.Component {
componentDidMount() {
// 获取 menu 数据
this.props.dispatch({
type: 'auth/getMenu',
})
}
link = (url) => {
router.push(url);
}
renderMenu = (data) => {
return data && data.map(d => {
if (d.children && d.children.length > 0) {
return <SubMenu
key={d.id}
title={<span><Icon type={d.icon} /><span>{d.name}</span></span>}
>
{this.renderMenu(d.children)}
</SubMenu>
}
return (
<Menu.Item
key={d.id}
onClick={() => {this.link(d.url)}}
>
<Icon type={d.icon} />
<span>{d.name}</span>
</Menu.Item>
)
});
}
render() {
const { menu } = this.props;
return (
<Menu theme='dark'
defaultSelectedKeys={['1']}
mode='inline'>
{
this.renderMenu(menu)
}
</Menu>
);
}
}
export default MenuComponent;
总的来说,menu组件会访问会调用saga effect,发出异步请求获取数据,然后通过dva connect获取menu数据做渲染。
我们刷新浏览器看到菜单已经正确渲染了。

结束语
这是开始的第一步,也欢迎大家监督,接下来会逐步把上面提到的功能完善起来。代码已放到github上,大家可以自行查看umi-react。
我建了一个QQ群,大家加进来,可以一起交流。群号 787846148
对上面有些内容不理解的同学参考如下内容
*umi 官网
*dva 官网
01 基于umi搭建React快速开发框架的更多相关文章
- 02 基于umi搭建React快速开发框架(国际化)
前言 之前写过一篇关于React的国际化文章,主要是用react-intl库,雅虎开源的.react-intl是用高阶组件包装一层来做国际化. 基于组件化会有一些问题,比如在一些工具方法中需要国际化, ...
- 03 基于umi搭建React快速开发框架(封装列表增删改查)
前言 大家在做业务系统的时候,很多地方都是列表增删改查,做这些功能占据了大家很长时间,如果我们有类似的业务,半个小时就能做出一套那是不是很爽呢. 这样我们就可以有更多的时间学习一些新的东西.我们这套框 ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
- Mario是一个基于.NETCore的简单快速开发框架
Mario .NET Core简单快速开发框架 Mario是一个基于.NET Core的简单快速开发框架 GitHub:https://github.com/deeround/Mario 技术特点 基 ...
- SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
近年来uni-app发展势头迅猛,只要会vue.js,就可以开发一套代码,发布移动应用到iOS.Android.Web(响应式).以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/ ...
- 基于SpringBoot+Mybatis+AntDesign快速开发平台,Jeecg-Boot 1.1 版本发布
Jeecg-Boot 1.1 版本发布,初成长稳定版本 导读 平台首页UI升级,精美的首页支持多模式 提供4套代码生成器模板(支持单表.一对多) 集成Excel简易工具类,支持单表.一对多导入 ...
- Known快速开发框架
Known是一个基于.NET开发的快速开发框架,前后端分离,使用极少的第三方组件,开发简单快速,大部分代码可通过代码生成工具自动生成,非常适合单兵作战和小团队开发.前端UI是一个基于JQuery开发的 ...
- Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具
Reactjs-generator-cli 一款基于Ink构建用于快速搭建React应用的CLI scaffolding工具 A simple CLI for scaffolding React.js ...
- 基于SpringBoot搭建应用开发框架(二) —— 登录认证
零.前言 本文基于<基于SpringBoot搭建应用开发框架(一)——基础架构>,通过该文,熟悉了SpringBoot的用法,完成了应用框架底层的搭建. 在开始本文之前,底层这块已经有了很 ...
随机推荐
- vba 弹框
'第三个按钮,上传数据到数据库 Private Sub CommandButton1_Click() str1 = "abcde" str2 = InputBox("请输 ...
- ionic 访问odoo11之具体业务类api接口
在前面测试通过odoo登录的功能,这次的问题重点是如何访问后台具体的业务类的接口呢?这次就以我们在odoo中安装的lunch模块为例,目标是获取lunch.alert的数据,如下图 具体过程接上次文章 ...
- webpackt入门1:webpack介绍&webpack安装&使用webpack打包
本篇博客不是原创,简书的zhangwang写的,原文太长,我这里只是提取了一部分. 原文地址:入门webpack,看这篇就够了 一.Webpack解决了什么问题 问题1.JavaScript这个脚本化 ...
- 同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL
问题描述 我们最近在使用Redis作Session的集中化,中间碰到了一个如下问题:我们有一些项目比较老,引用了NewtonJson的4.0.3.0版本的DLL,但是Redis提供的C#集成DLL引用 ...
- 洛谷 P4409 [ZJOI2006] 皇帝的烦恼
题目链接-> OVO 题解: 很久没有写博客了,可能是因为最近太颓废了吧. 刚刚考完期末考试,无比期盼早点外出学习,不要面对成绩,害怕. #include <cstdio> #inc ...
- Redis+Keepalived高可用环境部署记录
Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从.主备.互备方案,尤其是无状态业务,有状态业务就需要额外 ...
- 基于Ping和Telnet/NC的监控脚本案例分析
案例一:单纯地对某些ip进行ping监控 [root@test opt]# cat /opt/hosts_ip_list 192.168.10.10 192.168.10.11 192.168.10. ...
- XenServer虚拟化环境安装记录
Xenserver,思杰基于Xen的虚拟化服务器.Citrix XenServer是一种全面而易于管理的服务器虚拟化平台,基于强大的 Xen Hypervisor 程序之上.XenServer 是为了 ...
- Spring RPC 入门学习(3)-获取Student对象
Spring RPC传递对象. 1. 新建RPC接口:StudentInterface.java package com.cvicse.ump.rpc.interfaceDefine; import ...
- Visual Studio2015安装过程以及单元测试
安装环境: 安装版本: Visual Studio2015 安装过程: 因为我是在第一次老师安排的作业的时候感觉VC++6.0不如VS方便所以才装的Visual Studio2015,又安装了点插件, ...