当前位置: 首页 > 工具软件 > dva > 使用案例 >

Dva

齐航
2023-12-01

简单描述

1 Dva 可认为是一个 CLI, 来搭建一个 React 项目   // 但目前已经被作者弃用, 推介使用 Umi

2 Dva 核心是提供一个, 基于 redux 和 redux-saga 的, 便于操作的数据流方案   // Umi 中也是用的此数据流方案

3 学习点 -> "数据流方案" + "数据请求库 fetch"   

4 https://gitee.com/Fzzhang_wei/dva-hh   // 项目练习环境

5 https://www.bilibili.com/video/BV1s7411v73j?p=1   // 视频学习地址

基础目录结构
  ┏━ mock  //用于模拟一些假数据来使用
  ┣━ public  //放置那个html 文件
  ┣━ src
     ┣━ odels  //放置 redux 部分
     ┣━ routes  //放置单文件组件, 类似 pages 文件
     ┣━ services  //调用请求的路径配置
     ┣━ utils  // 这个应该是一些工具方法, 默认放置的数据请求的二次封装
     ┣━ router.js  //路由配置文件 --> 注意一下使用方式
     ┣━ services  //配置数据请求的, 默认放置了一个路径集中管理的文件
  ┗━ .webpackrc  //跨域代理的配置文件
路由配置
1 新建单文件组件位置: routes/A1.js

2 路由配置文件: src/router.js
  + import A1 from "./routes/A1"
  + <Route path="/a1" exact component={A1}/>
基础 API
1 跳转标签

  + import {Link} from 'dva/router'
  + <Link to="/"> 首页</Link>  //跳转到首页

2 高阶组件

  + import {withRouter} from 'dva/router'   // 被该组件修饰的 UI组件, 可以设置编程式导航
  + this.props.history.push("/")  //跳转到首页
  + export default withRouter(A1)  //高阶组件修饰步骤
Dva 数据流

1 基本理解
  
  1 单个 model 仓库文件: state + 同步数据处理(reducers) + 异步数据处理(effects) + 全局计算属性(subscriptions)
  
  2 每个 model 仓库文件, 都是一个独立的命名空间, 有自己的空间命名   // 跟 Vuex 的区别点

  3 同步数据处理(reducers) -> 用于操作该 model 仓库的本地数据 (state)

  4 异步数据处理(effects) -> 用于调接口 / 调 reducers 中的方法去操作 (state)

  5 model 仓库 和 单文件组件, 都可以调用数据接口

  6 如果是某个单文件组件的独有数据, 那么再组件内调用数据接口就 OK

  7 如果是多个组件都, 需要去使用, 需要去调用的数据接口, 那么就在 model 仓库中调用数据接口就 OK
    


2 核心文件

  1 models/xx.js   // 独立的数据仓库
  
  2 src/routes/xx.jsx   // 单文件组件, 要使用跟它连接的数据仓库



3 环境配置

  1 /src/index   // 用来做配置, Dva 中需要把每个 modul 仓库添加到全局

  2 /.webpackrc   // Dva 中配置前端请求代理的文件 -- 开发中一般都需要配的, 通常会涉及跨域

  3 /src/utils/request.js   // 基于网络请求库, 数据请求封装

  4 /src/services/example.js   // 基于数据请求封装, 的请求路径封装  [路径集中管理, 便于维护开发]

Mock 数据

1 描述: 有时候在前端开发中, 后端没有及时的提供数据接口, 我们拿不到数据怎么办 "mock 就是我们前模拟的假数据"


2 操作流程

  1 /mock/testMock.js   // 新建假数据文件

  2 /.roadhogrc.mock.js   // 把假数据文件挂载到项目上

  3 /src/services/examole.js   // 配置请求接口, 然后就可以被调用了

过渡组件 dva-loading
1 简单描述: 

  1 本质作用: dva-loading 只是提供"当前"异步加载方法的状态

  2 当前异步加载方法:  loading.effects['user/query']   // 命名空间 user -> query 异步方法
  
  3 loading 在异步请求发出那一刻, 就会持续监听, 该异步请求方法的状态

  4 在异步请求结束之前 isLoading 的值一直是 true

  5 当此次异步请求结束时 isLoading 的值变成 false, 同时 loading 对象停止监听



2 代码范式   // Dva 项目中需要进行配置一下, 一般通过 umi 使用, 应该不需要配置了吧

  1 配置: /src/index.js   // 配置完成后, 在任何一个单文件组件中, 都可以访问到 loading 对象
    import createLoading from 'dva-loading'
    const app = dva()
    app.use(createLoading())

  2 单文件组件 xx.jsx   
  
    // loading 的获取方式; app = 假设为命名空间
    export default connect( state => ({ app: state.app, loading: state.loading }) )(A1) 
    export default connect( ({ app, loading }) => ({ app, loading }) )(A1)

    // loading 有三个 API 
    1 loading.effects['user/query']
	2 loading.global   // 当页面处于异步加载状态时该值为 true,当页面加载完成时,自动监听该值为 false

 类似资料:

相关阅读

相关文章

相关问答

相关文档