安装 dva-cli
通过 npm 全局安装 dva-cli 并确保版本是 0.9.1 或以上。
npm install dva-cli -g
创建新应用
安装完 dva-cli 之后,就可以在命令行里访问到 dva 命令(不能访问?)。现在,你可以通过 dva new 创建新应用。
dva new dva-app
Dav目录
安装完成之后,能看到项目结构
├── mock // mock数据文件夹
├── node_modules // 第三方的依赖
├── public // 存放公共public文件的文件夹
├── src // 最重要的文件夹,编写代码都在这个文件夹下
│ ├── assets // 可以放图片等公共资源
│ ├── components // 就是react中的木偶组件
│ ├── models // dva最重要的文件夹,所有的数据交互及逻辑都写在这里
│ ├── routes // 就是react中的pages
│ ├── services // 放请求借口方法的文件夹
│ ├── utils // 自己的工具方法可以放在这边
│ ├── index.css // 入口文件样式
│ ├── index.js // 入口文件
│ └── router.js // 项目的路由文件
├── .eslintrc // bower安装目录的配置
├── .editorconfig // 保证代码在不同编辑器可视化的工具
├── .gitignore // git上传时忽略的文件
├── .roadhogrc.js // 项目的配置文件,配置接口转发,css_module等都在这边。
├── .roadhogrc.mock.js // 项目的配置文件
└── package.json // 当前整一个项目的依赖
然后在项目根目录输入 npm start 启动项目,可以看到下面的页面
使用 antd
通过 npm 安装 antd 和 babel-plugin-import 。
npm install antd babel-plugin-import --save
注意!!!
请在全局目录下找到 .webpackrc 文件,输入以下代码,使 babel-plugin-import 插件生效。
{
+ "extraBabelPlugins": [
+ ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
+ ]
}
定义路由
我们通过import引入指定页面,在Route标签中引入。
import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import IndexPage from './routes/IndexPage';
function RouterConfig({ history }) {
return (
<Router history={history}>
<Switch>
<Route path="/" exact component={IndexPage} />
</Switch>
</Router>
);
}
export default RouterConfig;
编写 UI Component
一般为我们创建出来的公共组件。
定义 Model
完成 UI 后,现在开始处理数据和逻辑。
dva 通过 model 的概念把一个领域的模型管理起来,包含同步更新 state 的 reducers,处理异步逻辑的 effects,订阅数据源的 subscriptions 。
export default {
namespace: 'example',
state: {},
reducers: {
save(state, action) {
return { ...state, ...action.payload };
},
},
effects: {
*fetch({ payload }, { call, put }) { // eslint-disable-line
yield put({ type: 'save' });
},
},
subscriptions: {
setup({ dispatch, history }) { // eslint-disable-line
},
},
};
这个 model 里:
- namespace 表示在全局 state 上的 key
- state 是初始值,在这里是空数组
- reducers 等同于 redux 里的 reducer,接收 action,同步更新 state
- effects 用来处理异步操作。如果需要调取接口的话,前台页面就需要调用 effects 里的方法。
- subscription 相当于一个监听器,可以监听路由的变化、鼠标、键盘、服务器连接变化等。
connect 连接 Model 和 Route 页面下的数据
dva 有提供 connect 方法。只要在每个 Routes 页面导入下面的代码即可。
import { connect } from ‘dva’;
我们在最后导出时使用 connect 进行与 Models 的连接。
export default connect(({ example }) => ({ example }))(IndexPage);
example为 Model 层里面的 namespace。
IndexPage为路由。