首先第一步安装 dva-cli,安装成功之后即可通过 dva -v 查看版本。

    1. $ npm install dva-cli -g
    2. $ dva -v
    3. dva:command not found

    如在未安装成功的情况下,查看版本会出现dva:command not found提示,我们可以通过cnpm再尝试安装一下。

    1. $ npm install -g cnpm --registry=https://registry.npm.taobao.org
    2. $ cnpm install dva-cli -g
    3. $ dva -v
    4. dva-cli version 0.10.0

    此时dva已安装成功,通过 dva 命令 dva new 创建一个新应用

    1. $ dva new dva-demoOne

    这样会创建一个名为 dva-demoOne 的项目文件,包含项目初始化目录和文件,主要为 mock,pulic,src 三大类文件,该项目提供了数据 mock 数据服务,应用构建,开发服务器等服务。进入 dva-demoOne ,执行 npm start 命令。

    1. $ cd dva-demoOne
    2. $ npm start

    即可看到:

    1. You can now view Your App in the browser.
    2. Local: http://localhost:8000/
    3. On Your Network: http://本地ip:8000/
    4. Note that the development build is not optimized.
    5. To create a production build, use npm run build.

    在浏览器里打开 http://localhost:8000 ,你会看到 dva 的欢迎界面。我们的例子已雏形初现,接下来我们来添加页面实现一个简单功能。

    第一步:我们可以来编辑路由

    1. import Counter from './routes/Counter';
    2. <Route path="/count" exact component={Counter} />

    第二步:编写 ui 组件

    1. import React from 'react';
    2. import { connect } from 'dva';
    3. class Counter extends React.Component {
    4. addNum = () => {
    5. const {dispatch,counter} = this.props;
    6. const {count} = counter;
    7. dispatch({
    8. type: 'counter/save',
    9. payload: {count: count + 1}
    10. })
    11. };
    12. reduceNum = () => {
    13. const {dispatch,counter} = this.props;
    14. const {count} = counter;
    15. dispatch({
    16. type: 'counter/save',
    17. payload: {count: count - 1}
    18. })
    19. };
    20. reset = () => {
    21. const {dispatch} = this.props;
    22. dispatch({
    23. type: 'counter/reset',
    24. })
    25. }
    26. render (){
    27. const {count} = this.props.counter;
    28. return (
    29. <div>
    30. {count}
    31. <button onClick={this.addNum}>增加</button>
    32. <button onClick={this.reduceNum}>减少</button>
    33. <button onClick={this.reset}>重置</button>
    34. </div>
    35. )
    36. }
    37. }
    38. export default Counter;

    第三步:编写 model

    1. const defaultState = {
    2. count: 0,
    3. }
    4. export default {
    5. namespace: 'counter',
    6. state: {
    7. ...defaultState
    8. },
    9. reducers: {
    10. save(state, action) {
    11. return {
    12. ...state,
    13. ...action.payload
    14. };
    15. },
    16. reset(state){
    17. return {
    18. ...state,
    19. ...defaultState
    20. }
    21. }
    22. },
    23. };

    我们现在已经完成 model 和 ui 组件,我们需要将 model 和 view 给 connect 起来,dva 提供了 connect 方法。

    1. export default connect(({counter}) => ({counter}))(Counter);

    接下来最重要的一点就是不要忘了在 index.js 里面引用 model。

    1. app.model(require('./models/counter').default);

    此时访问http://localhost:8000/#/count ,即可看到一个简易的计数器。到此我们的例子已基本完成。接下来会对上述例子中运用到的概念进行解释,不要走开哟。