可以参考官方文档
通过 npm 安装 dva-cli 并确保版本是 0.9.1 或以上。(“$符”代表你的文件路径,如:D:\Dvajs_workspace\)
$ npm install dva-cli -g $ dva -v dva-cli version 0.9.1dva版本符合要求之后,进入想要创建项目的文件夹下,打开命令行窗口(cmd),运行以下指令
$ dva new dva-quickstartdva-quickstart 为想要创建的dva项目名称
进入项目,打开cmd窗口,运行指令
$ cd dva-quickstart $ npm start3.1运行时可能出现的问题以及解决办法
运行npm start时 若出现多个爆红ERO,则删除node_modules文件夹(依赖文件夹),然后执行以下指令
npm install等待安装好依赖之后就行了。(若还是不行,建议百度,毕竟我就遇到过这一种,抱歉)
运行成功之后出现以下页面则说明运行成功
2.1 index.js
import dva from 'dva'; import './index.css'; // 1. Initialize const app = dva();//项目初始化 // 2. Plugins // app.use({}); // 3. Model // app.model(require('./models/example').default);//声明数据处理文件位置 // 4. Router app.router(require('./router').default);//声明路由 // 5. Start app.start('#root');//项目启动方式2.2 router.js
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;2.3 utils/request.js
import fetch from 'dva/fetch'; //自动生成的请求工具函数,可以自定义 function parseJSON(response) { return response.json(); } function checkStatus(response) { if (response.status >= 200 && response.status < 300) { return response; } const error = new Error(response.statusText); error.response = response; throw error; } /** * Requests a URL, returning a promise. * * @param {string} url The URL we want to request * @param {object} [options] The options we want to pass to "fetch" * @return {object} An object containing either "data" or "err" */ export default function request(url, options) { return fetch(url, options) .then(checkStatus) .then(parseJSON) .then(data => ({ data })) .catch(err => ({ err })); }2.4 services/example.js
import request from '../utils/request'; //定义了一个services展示文件,只做请求示范,无具体用处 export function query() { return request('/api/users'); }2.5 routes/IndexPage.js
import React from 'react'; import { connect } from 'dva'; import styles from './IndexPage.css'; //定义路由,调用数据,展示信息 function IndexPage() { return ( <div className={styles.normal}> <h1 className={styles.title}>Yay! Welcome to dva!</h1> <div className={styles.welcome} /> <ul className={styles.list}> <li>To get started, edit <code>src/index.js</code> and save to reload.</li> <li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li> </ul> </div> ); } IndexPage.propTypes = { }; export default connect()(IndexPage);2.6 models/example.js
//本身这个文件应该是定义数据,函数,进行数据处理的模块 //初始化项目中,在index.js中没有引用该文件,因此该文件目前无作用 export default { namespace: 'example', state: {}, subscriptions: { setup({ dispatch, history }) { // eslint-disable-line }, }, effects: { *fetch({ payload }, { call, put }) { // eslint-disable-line yield put({ type: 'save' }); }, }, reducers: { save(state, action) { return { ...state, ...action.payload }; }, }, };2.7 components/Example.js
import React from 'react'; //定义了一个基础组件,该组件的唯一用途就是在一行显示“Example”字样 const Example = () => { return ( <div> Example </div> ); }; Example.propTypes = { }; export default Example;在IndexPage底部调用Example组件之后,效果如下: