react/antd notes
Ant Design Pro使用小记
背景
从Angular变更到React技术栈…
吾队, 统一使用React了, 别问为什么, 我想了好几天也没搞明白.
写吧写吧.
如今, 就一个人好好搬砖吧.
本次项目直接使用antd pro, 阿里的那一套……
初始化工作
由于本次直接使用的是
ali的antd pro 中台解决方案. 基本相当于二次开发……
安装脚手架
1 | npm install dva-cli -g |
本地运行:
1 | cd projectName |
项目目录解析
1 | # 未包含隐藏.xx相关配置文件 |
mock目录下都是mock数据用的文件public目录下存放静态资源文件src项目的源码tests单元测试代码
关于以 . 开头的隐藏文件说明:
.roadhogrc.mock.js该文件主要是用来在本地mock数据时 拦截、代理本地接口请求用的. 具体使用, 后续会讲到..webpackrc.jswebpack打包配置相关设定, 可以看到已经将antd这个库设置为打包进去了, 使用react官方脚手架,创建时 时需要人为配置..eslint.js,.babelrc.ks都是相关配置文件, 暂不需要过度关注和修改.
src目录说明
1 | . |
assets文件夹, 静态资源存放common文件夹, 公共的, 按照ant pro设定就2个文件components文件夹, 纯UI组件e2e, end 2 end 测试models文件夹, 存放模型Model(和数据操作密切相关的)文件, 和dva密切关联.utils, 一些常用函数工具类库services, 存放一些接口请求相关的封装routes文件夹, 存放页面相关的route component(不是纯UI组件, 其包含了一些具体的页面操作交互、方法定义、周期钩子函数componentDidMount等).layouts, 整个页面的布局设定polyfill.js, 兼容性设置index.js, 整个应用入口- 其它暂时不用管……
项目示例
需求: 需要展示一个 product 列表, 并在左侧导航栏的二级菜单下有一个入口.
menu配置
- 菜单配置, 添加入口, 修改
src/common/menu.js文件.
找到path: 'management'关键字, 在children下按照同样的语法格式添加即可. 该语法和Angular中的路由配置类似.
1 | path: 'management', |
路由配置
- 添加路由配置, 修改
src/common/router.js文件. 在routerConfig对象找个合适的位置按照同样的语法添加即可.
1 | '/management/product_line': { |
注意,
dynamicWrapper方法的第二个数组参数, 通常用来设置该路由组件(即ProductLine)所对应的Model.
view层router component组件
- 添加该
View层的路由组件
1 | <!-- 页面视图 --> |
模态框的简单封装:
1 | <!-- 上面👆那个页面用到的模态框封装 --> |
view层router component组件对应的model
- 通信
针对上述3中的route component组件, 发现其中有几个方法以及与接口API交互的方法.
第一个: 进入当前页面路由后, 初始化加载的数据. 在 ProductLine 类中可以看到:
1 | componentDidMount() { |
这是
React提供的生命周期钩子函数,render渲染到DOM时就会自动触发该钩子函数, 从而发起请求fetch; 具体写法:model的namespace/方法名.
在类中调用该接口请求, 另一个必须的依赖就是 dva (阿里基于redux + react-router + redux-saga 等库的轻量封装). 使用 connect 连接到该组件的 model
该组件的model如下:
1 | import { |
可以看到
view层的router component组件调用了其对用的model里封装的方法. 但是实际的接口地址在哪里呢? 在下面👇
接口services层封装
在上面的第4步中可以看到该
model从services文件夹下的productline中导入了几个方法.
接口 service 如下:
1 | import request from '../utils/request'; |
这里配置的URL 都是本地mock的, 默认是被本地mock接口拦截的.
至此, 整个数据流向和API请求使用, 按照上面的步骤 一步步下来 就很清晰了.
数据流
Ant Design Pro 内置使用的是
dva.
对照此图即可 明了.
应用的数据流向(和API交互过程)
数据流向
Action:
Action是把数据从应用(如:用户输入、点击事件触发的数据、或是从接口请求获取的数据) 传递到store的一个载体。
Action本质上是JS 普通对象。约定:Action内必须有一个字符串类的type 字段,用来表示将要执行的动作。
一般/多数情况下,type会被定义成字符串常量;
Reducer:
指定 应用状态的变化如何响应actions并发送到store(actions只描述有事情发生这一事实,没有描述应用如何更新state);
Reducer是个纯函数,主要作用:接受旧的state和action,返回新的state。
Redux应用中, 所有的state都被保存在一个单一对象中。
所以,reducer函数中 只是单纯进行计算(返回新的state),没有API请求、没有变量修改、
Store:
Store就是把action和reducer联系到一起的对象。
React简单说明
React 并不是Web应用的完整解决方案, 只是DOM的抽象层.
React中值传递 都是向下传递的、单向的; 只能从父级 流向 子级.
组件声明规范: 无论是函数方式还是ES6中的class方式声明组件, 组件的命名规范: 首字母必须大写!
dva 说明
dva 是alibaba基于 redux + react-router + redux-saga 的一层轻量封装.
关于Redux
Redux和react没有 什么直接关系.
Redux不仅支持react, 也支持angular、ember、jQuery、纯JS.
关于Andt Pro
Ant Design of React 只是一个React相关的组件库。类似angular相关的UI库 ng-zorro. 而 Ant Design Pro相当于一个更上层的应用/模板,协助快速开发出应用。
相关资料
关于 dva 使用:
练习:
https://gitee.com/lomospace/dva-sample
React
Google即可.
Ant Design Pro
练习:
https://gitee.com/lomospace/antPro
Redux
Doc(中文)
https://cn.redux.js.org/
视频(英文)
https://egghead.io/lessons/
React 脚手架
官方:
https://github.com/facebook/create-react-app
dva系:
1 | # install |
https://dvajs.com/guide/getting-started.html#%E5%AE%89%E8%A3%85-dva-cli
版权声明:
本文由Lomo创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,
转载请注明作者及出处,本文作者为Lomo,本文标题为react/antd notes.
