Ant Design Pro快速入门
同时讲解了如何启动服务并查看前端页面功能。
在本文中,我们将简单讲解如何在Ant Design Pro框架下实现自己的业务功能。
目录结构浅谈
首先,我们来简单了解一下整个项目的目录结构及其中每个文件的功能。
一个完整的目录结构如下:
其中,关于业务功能的代码都在src
文件夹下。
而src
中本身又包含着很多的子文件夹。
其中,我们最常用的应该了routes
,services
,models
以及components
。
下面,我们来依次了解一下这四个文件夹的作用。
- routes:每个路由对应的页面组件文件。主要定义具体页面的基本结构和内容。
- services:用于与后台交互、发送请求等。
- models:用于组件的数据存储,接收请求返回的数据等。
- components:组件文件夹。每个页面可能是由一些组件组成的,对于一些相对通用的组件,建议将该组件写入components文件夹中,并在routes文件夹中的文件引入来使用。
其余的文件夹和文件功能和含义我们不再此处展开说明,但是会在后续使用过程中随时进行补充说明。
配置新的路由和菜单
在Ant Design Pro中,前端路由是通过react-router4.0进行路由管理的。
下面,我们将会讲解如下添加一个新的路由,并在前端页面中增加一个菜单来对应该路由。
在Ant Design Pro中,路由的配置文件统一由src/common/router.js
文件进行管理。
示例内容如下:
const routerConfig = {
'/': {
component: dynamicWrapper(app, [], () => import('../layouts/BasicLayout')),
},
'/dashboard/monitor': {
component: dynamicWrapper(app, ['monitor'], () => import('../routes/Dashboard/NgMonitor')),
},
'/dashboard/workplace': {
component: dynamicWrapper(app, ['monitor'], () => import('../routes/Dashboard/NgWorkSpace')),
}
}
其中,包含了三个路由:/
,/dashboard/monitor
,/dashboard/workplace
。
同时,指定了这三个路由分别对应的页面文件为layouts/BasicLayout.js,routes/Dashboard/NgMonitor.js以及Dashboard/NgWorkSpace.js文件。
下面,我们可以在侧边栏中填写一项来对应到我们添加的路由中:
示例如下:
const menuData = [{
name: 'dashboard',
icon: 'dashboard', // https://demo.com/icon.png or <icon type="dashboard">
path: 'dashboard',
children: [{
name: '分析页',
path: 'analysis',
}, {
name: '监控页',
path: 'monitor',
}, {
name: '工作台',
path: 'workplace',
}, {
name: '测试页',
path: 'test',
}],
}, {
// 更多配置
}];
创建一个页面
下面,我们继续来创建一个页面,对应到我们添加的路由中。
在src/routes
下创建对应的js文件即可。 newPage.js
:
示例如下:
import React, { PureComponent } from 'react';
export default class Workplace extends PureComponent {
render() {
return (
<h1>Hello World!</h1>
);
}
}
新增一个组件
假设该页面相对复杂,我们需要引入一个组件呢?
我们可以在components文件夹下创建一个组件,并在newPage.js
引入并使用。
示例如下: components/ImageWrapper/index.js
:
import React from 'react';
import styles from './index.less'; // 按照 CSS Modules 的方式引入样式文件。
export default ({ src, desc, style }) => (
<div style="{style}" classname="{styles.imageWrapper}">
<img classname="{styles.img}" src="{src}" alt="{desc}">
{desc && <div classname="{styles.desc}">{desc}</div>}
</div>
);
修改newPage.js
:
import React from 'react';
import ImageWrapper from '../../components/ImageWrapper'; // 注意保证引用路径的正确
export default () => (
<imagewrapper src="https://os.alipayobjects.com/rmsportal/mgesTPFxodmIwpi.png" desc="示意图">;
)
增加service和module
假设我们的newPage.js
页面需要发送请求,接收数据并在页面渲染时使用接收到的数据呢?
例如,我们可以在组件加载时发送一个请求来获取数据。
componentDidMount() {
const { dispatch } = this.props;
dispatch({
type: 'project/fetchNotice',
});
dispatch({
type: 'activities/fetchList',
});
dispatch({
type: 'chart/fetch',
});
}
此时,它将会找到对应的models中的函数来发送请求:
export default {
namespace: 'monitor',
state: {
currentServices: [],
waitingServices: [],
},
effects: {
*get_current_service_list(_, { call, put }) {
const response = yield call(getCurrentServiceList);
yield put({
type: 'currentServiceList',
currentServices: response.result,
});
},
*get_waiting_service_list(_, { call, put }) {
const response = yield call(getWaitingServiceList);
yield put({
type: 'waitingServiceList',
waitingServices: response.result,
});
},
},
reducers: {
currentServiceList(state, action) {
return {
...state,
currentServices: action.currentServices,
};
},
waitingServiceList(state, action) {
return {
...state,
waitingServices: action.waitingServices,
};
},
},
};
而真正发送请求的实际是service文件夹下的文件进行的。
export async function getWaitingServiceList() {
return request('/api/get_service_list', {
method: 'POST',
body: {"type": "waiting"},
});
}
export async function getCurrentServiceList() {
return request('/api/get_service_list', {
method: 'POST',
body: {"type": "current"},
});
}
在routes文件夹中,我们可以直接在render部分使用应该得到的返回值进行渲染显示:
const { monitor, loading } = this.props;
// monitor指的是相当于数据流
const { currentServices, waitingServices } = monitor;
// 从数据流中取出了具体的变量
mock数据
在我们开发的过程中,通常不可避免的就是mock数据。
那具体应该如下进行mock数据呢?主要依赖的是.roadhogrc.mock.js
文件。
打开指定文件,我们可以看到如下的类似内容:
const proxy = {
'GET /api/fake_list': [{
key: '1',
name: 'John Brown',
age: 32,
address: 'New York No. 1 Lake Park',
}, {
key: '2',
name: 'Jim Green',
age: 42,
address: 'London No. 1 Lake Park',
}, {
key: '3',
name: 'Joe Black',
age: 32,
address: 'Sidney No. 1 Lake Park',
}],
'POST /api/login/account': (req, res) => {
const { password, userName, type } = req.body;
if(password === '888888' && userName === 'admin'){
res.send({
status: 'ok',
type,
currentAuthority: 'admin'
});
return ;
}
if(password === '123456' && userName === 'user'){
res.send({
status: 'ok',
type,
currentAuthority: 'user'
});
return ;
}
res.send({
status: 'error',
type,
currentAuthority: 'guest'
});
}
}
在上面的例子中,我们分别描述了针对GET和POST请求应该如下进行数据Mock。
打包
当我们将完整的前端项目开发完成后,我们需要打包成为静态文件并准备上线。
此时,我们应该如何打包项目呢?
非常简单,只需要执行如下命令即可:
npm run build
此外,有时我们希望分析依赖模块的文件大小来优化我们的项目:
npm run analyze
运行完成后,我们可以打开dist/stats.html
文件来查询具体内容:
至此为止,我们就讲解完成了Ant Design Pro的快速入门。
在后续文章中,我们会对一些具体的使用来进行分析和剖析。
大家在使用的过程中如果发现一些问题也欢迎大家留言讨论。
</imagewrapper></icon>
Ant Design Pro快速入门的更多相关文章
- 【后台管理系统】—— Ant Design Pro入门学习&项目实践笔记(三)
前言:前一篇记录了[后台管理系统]目前进展开发中遇到的一些应用点,这一篇会梳理一些自己学习Ant Design Pro源码的功能点.附:Ant Design Pro 在线预览地址. Dashboard ...
- ant design pro超详细入门教程
1.Ant Design Pro 初了解 说到ant design pro,得先了解一下ant design是个什么东西?ant design蚂蚁金服基于react打造的一个服务于企业级产品的UI框架 ...
- Ant Design Pro入门教程,安装,运行(V5 Typescript版)
[前言] 找了很多Admin模板,最后还是看中了AntDesignPro这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro.ant.design/in ...
- 测试平台系列(5) 引入Ant Design Pro
引入Ant Design Pro 回顾 还是继续回顾下之前的作业, 返回的中文变成了ascii字符,不要紧,我们光荣地百度一哈. 随便点进去看看,都可以找到正确答案: 可以看到,我们需要修改confi ...
- Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
ant-design-pro ----> version :2.3.1 由于网上Ant Design Pro+Electron的资料太少,我就贡献一点经验 最近需要讲AntD Pro项目(以 ...
- ant design pro (十二)advanced UI 测试
一.概述 原文地址:https://pro.ant.design/docs/ui-test-cn UI 测试是项目研发流程中的重要一环,有效的测试用例可以梳理业务需求,保证研发的质量和进度,让工程师可 ...
- ant design pro(一)安装、目录结构、项目加载启动【原始、以及idea开发】
一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等, ...
- Ant Design Pro (中后台系统)教程
一.概念:https://pro.ant.design/docs/getting-started-cn(官方网站) 1.Ant Design Pro 是什么: https://www.cnblogs ...
- ant design pro 当中改变ant design 组件的样式和 数据管理
ant design pro 简介 官网简介 链接 https://pro.ant.design/docs/getting-started-cn 项目结构 https://github.com/ant ...
随机推荐
- 【Web】Django OAuth invalid_grant error
This can happen if the code is expired. They expire pretty quickly by default. You can look up your ...
- 用java源代码学数据结构<七>: BST
/* * 以int类为例 * 其它的类必须能够比较 * */ //二叉搜索树的节点点 class BSTNode{ int item; BSTNode lc; BSTNode rc; BSTNode ...
- 将本地jar包添加到maven中
将需要引入的jar包拷贝到maven项目的WEB-INF/lib中 在pom.xml中配置如下: <dependency> <groupId>com.xxxxx.union&l ...
- Boost.Asio c++ 网络编程翻译(21)
同步VS异步 Boost.Asio的作者做了一个非常惊艳的工作:它能够让你在同步和异步中自由选择,从而更好的适应你的应用. 在之前的章节中,我们学习了每种类型应用的框架,比方同步client,同步服务 ...
- HTML学习笔记(五)
1. Javascript是一种脚本语言,它的作用是提供用户交互.动态更改内容.数据验证. 2. 我们使用script标签将javascript的语句嵌入到html文档中. 3 ...
- .NET Framwork 之 源代码编译成托管代码托管代码合并成程序集
我们都知道,C#程序需要在 .NET Framework 的环境中运行. 一.程序运行所需的三个关键 1.IL(中间语言):编译器编译源代码时生成的代码. 2. Framework类库(Framewo ...
- asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用
asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用
- 使用Guava报错NoSuchMethodError的解决方法
在使用Guava缓存的时候.系统报错: java.lang.NoSuchMethodError: com.google.common.base.Objects.firstNonNull 错误原因就是找 ...
- C语言-结构体内存对齐
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- Windows 环境下分布式跨域Session共享
为什么还是那句话,在网上找了N篇Session共享,但真正可以直接解决问题的还是没有找到. 一.以下为本人亲测,为防止环境不一致,对本文产生歧义,限定环境如下: 1. IIS7.0 2. Asp.ne ...