zoukankan      html  css  js  c++  java
  • Dva.js 入门级教学文档-1

    Dva.js 入门级教学文档-1

    • 简介
      • 一、介绍
        • 1、什么是 dva
        • 2、dva 的作用是什么
      • 二、环境搭建和使用
        • 1、环境搭建
        • 2、创建项目
        • 3、使用 antd
      • 三、全局架构
        • 1、index.js(重点)
          • (1)、创建 dva 实例
          • (2)、装载插件
          • (3)、注册 Model
          • (4)、配置路由
          • (5)、启动应用
        • 2、router.js
          • 使用
          • 解释一下
        • 3、components 包
        • 4、routes 包
        • 5、services 包
        • 6、utils 包
        • 6、models 包

    简介

    本次教程共分为两个文档,这是第一部分(一、二、三)。

    先给小伙伴们看一下本文的目录架构:

    • 一、介绍
    • 二、环境搭建和使用
    • 三、全局架构
    • 四、Model 包下文件架构
    • 五、connect 连接 Model 和 Route 页面下的数据
    • 六、初始化数据 和 Model 数据比对
    • 七、数据显示和操作的流程
    • 八、稍复杂概念

    一、介绍

    1、什么是 dva

    React 应用级框架,将 React-Router + Redux + Redux-saga 三个 React 工具库包装在一起,简化了 API,让开发 React 应用更加方便和快捷

    简单理解:dva = React-Router + Redux + Redux-saga

    2、dva 的作用是什么

    二、环境搭建和使用

    1、环境搭建

    $ npm install dva-cli -g    
    $ dva -v                    //查看下是否安装成功,显示 dva 的版本号
    dva-cli version 0.9.1
    

    2、创建项目

    $ dva new dva-1    //dva-1 为你创建项目的名称
    

    安装成功后,cd 进入 dva-1 目录下,通过 npm start 和 yarn start 启动项目

    如果启动报错的话,可以先执行 npm i 或者 yarn

    3、使用 antd

    在进入到项目目录下后,输入如下命令:

    $ npm install antd babel-plugin-import --save
    

    通过 npm 安装 antd 和 babel-plugin-importbabel-plugin-import 是用来按需加载 antd 的脚本和样式的。

    注意!!!

    请在全局目录下找到 .webpackrc 文件,输入以下代码,使 babel-plugin-import 插件生效。

    {
    +  "extraBabelPlugins": [
    +    ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
    +  ]
    }
    

    再次强调:注意上面的插件生效的代码,不输入以上代码,按需加载 antd 插件不生效

    三、全局架构

    .
    ├── mock    // mock数据文件夹
    ├── node_modules // 第三方的依赖
    ├── public  // 存放公共public文件的文件夹
    ├── src  // 最重要的文件夹,编写代码都在这个文件夹下
    │   ├── assets // 可以放图片等公共资源
    │   ├── components // 就是react中的木偶组件
    │   ├── models // dva最重要的文件夹,所有的数据交互及逻辑都写在这里
    │   ├── routes // 就是react中的智能组件,不要被文件夹名字误导。
    │   ├── services // 放请求借口方法的文件夹
    │   ├── utils // 自己的工具方法可以放在这边
    │   ├── index.css // 入口文件样式
    │   ├── index.ejs // ejs模板引擎
    │   ├── index.js // 入口文件
    │   └── router.js // 项目的路由文件
    ├── .eslintrc // bower安装目录的配置
    ├── .editorconfig // 保证代码在不同编辑器可视化的工具
    ├── .gitignore // git上传时忽略的文件
    ├── .roadhogrc.js // 项目的配置文件,配置接口转发,css_module等都在这边。
    ├── .roadhogrc.mock.js // 项目的配置文件
    └── package.json // 当前整一个项目的依赖
    

    1、index.js(重点)

    import dva from 'dva';
    
    // 1、创建 dva 实例
    const app = dva();
    
    // 2、装载插件 (可选)
    app.use(require('dva-loading')());
    
    // 3、注册 Model
    app.model(require('./models/example'));
    
    // 4、配置路由
    app.router(require('./router'));
    
    // 5、启动应用
    app.start('#root');
    

    通过上面的代码块,应该就可以很清楚了了解到 Dva 的5个 API

    如果还不清楚,没关系,下面我一一讲解:

    (1)、创建 dva 实例

    用于创建应用,返回 dva 实例,dva 支持多实例,如:

    const app = dva({
         history,
         initialState,
         onError,
         onAction,
         onStateChange,
         onReducer,
         onEffect,
         onHmr,
         extraReducers,
         extraEnhancers,
    });
    

    但是鉴于我只用过 initialState,就拿 initialState 来说。

    initialState 为初始化数据,后面会讲解它和 model 中 state 的区别。大家可以在留心观看哈。

    每个页面初始化的数据都将放在这里。并且 initialState 对象下的命名方式为:每个 model 的 namespce

    如果命名不规范,数据是初始化不到页面上的。

    (2)、装载插件

    需要任何样式的插件以上面的形式编写代码即可。

    如果不需要任何插件,这段代码都可以直接省略。

    上面引用的插件是:页面还未加载完毕时显示的 loading 图标,加上了上面那行插件代码,你就不要每个页面都写 showloading 和 hideloading 了。

    (3)、注册 Model

    你每创建出来的一个 model 都需要来全局 index.js 来注册一下,这样 model 层才能用。

    Model 层的代码是重点,会放到下面的第四大点重点讲解。这里只是告诉大家要注册一下。

    (4)、配置路由

    细心的小伙伴会发现在 index.js 同级目录下有一个 router.js,这里的配置路由就是配置这个页面的东西。下面第2小点马上就讲解,这里只是告诉大家,如何引用配置好的路由。

    (5)、启动应用

    启动应用不解释。

    2、router.js

    打开 router.js 你就看到如下的代码:

    import IndexPage from './routes/IndexPage';
    import HomePage from './routes/HomePage';
    
    <Router history={history}>
        <Switch>
        <Route path="/" exact component={IndexPage} />
            .
            .
            .
        <Route path="/home" exact component={HomePage} />
        </Switch>
    </Router>
    

    使用

    我们每创建出来的一个页面,都需要在这里配置路由。

    path:为页面的路径名称,注意:要加上前缀斜杠。命名可以随意,不过一般以创建页面的名字命名,这样比较清楚。

    component:为代码最上方导入的页面。

    上面我写了一个 home 页面的例子,供大家参考。

    解释一下

    每个路由器都会创建一个 history 对象,并用其保持追踪当前 location 并在有变化的时候进行重新渲染。

    location:是一个含有描述 URL 不同部分属性的对象。

    来看一下 Dva官网的解释:这里的路由通常指的是前端路由,由于我们的应用现在通常是单页应用,所以我们需要前端代码来控制路由逻辑,同茶馆浏览器提供的 History API可以监听浏览器url的变化,从而控制路由相关操作。

    dva 使用的是 react-router 来控制路由。

    小伙伴们如果想深入学习路由这块的内容可以找度娘搜索:react router 学习哈。

    3、components 包

    一般为我们创建出来的公共组件。

    4、routes 包

    这里我们可以理解为 pages。你所要显示出来的页面都写在这个下面。

    5、services 包

    为后台调用服务端接口的包,不做解释。

    6、utils 包

    这个包可以用来存放一些公共方法。需要使用时,导入 js,直接使用方法即可。

    6、models 包

    models 包用来存放 所有的 model 文件。

    一个完整的 model 文件的架构:

    export defalut {
        namespace:'',
        state:{},
        reducers:{},
        effects:{},
        subscriptions:{},
    }
  • 相关阅读:
    LOJ DFS序
    牛客练习赛31 D神器大师泰兹瑞与威穆
    Codeforces Round #487 (Div. 2) C
    Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C D
    [Windows Server 2003] 还原SQL Server数据库
    [Windows Server 2008] 查看PHP详细错误信息
    [Windows Server 2008] 安装网站伪静态
    网站Gzip压缩
    [Windows Server 2008] SQL Server 2008 数据库还原方法
    [Windows Server 2008] 安装Apache+PHP+MySQL
  • 原文地址:https://www.cnblogs.com/wangking/p/13668482.html
Copyright © 2011-2022 走看看