Dva.js(基础、简单例子解读)

news2024/12/23 17:13:50

简单介绍一下

       近期在做react项目时,看到项目中数据的公共存储用的Dva.js,整体的代码结构看起来和vuex差不多,这两天趁着刚忙完,利用工作之余的时间空隙,大致了解了dva的基础理论,代码结构应用,参考着其他优秀的技术大神博主,今天也做个大致的整理。

大致了解Dva:什么是dva呢?dva 首先是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。dva主要是为了降低组件之间耦合,简化元素,来降低开发难度。

数据流向:数据的改变发生通常是通过用户交互行为或者浏览器跳转行为来触发。

 这里图简单解读一下,通过dispatch 来触发action。如果是同步行为 通过 reducer 来改变 state的状态,异步行为的话,通过 effect 来触发 reducer 再改变 state

        1)这里的 Effect 指的是副作用,根据函数式编程,计算以外的操作都属于 Effect。

Dva概念:先上一段demo代码

app.model({
  namespace: 'todo',
  state: [],
  reducers: {
    add(state, { payload: todo }) {
      // 保存数据到 state
      return [...state, todo];
    },
  },
  effects: {
    *save({ payload: todo }, { put, call }) { // 第一个参数要传的值,第二个是Generator函数中的方法
      // 调用 saveTodoToServer,成功后触发 `add` action 保存到 state
      yield call(saveTodoToServer, todo); // 第一个值函数名称,第二个值传递的参数
      yield put({ type: 'add', payload: todo }); // 第一个值reducer名称,第二个值传递的参数
    },
  },
  subscriptions: {
    setup({ history, dispatch }) {
      // 监听 history 变化,当进入 `/` 时触发 `load` action
      return history.listen(({ pathname }) => {
        if (pathname === '/') {
          dispatch({ type: 'load' });
        }
      });
    },
  },
});

1) namespace dva 的命名,它就相当于一个 key ,通过这个 dva 命名来使用,处理 state 等一些列数据。

        举个例子在组件中使用:

import { connect } from 'dva';

function mapStateToProps(state) {
      return { 
            todos: state.todos 
      };
}
connect(todo)(mapStateToProps); //dva的命名:todo

2) State 是储存数据的地方,收到 Action 以后,会更新数据。

这里的 Action 是用来描述 UI 层事件的一个对象。

{
  type: 'add',
  payload: todo
}

3)select

  • Dva中 Effects 函数的固定传参
  • 用于拿到model中 state 的数据,需要注意的是,state 后面跟命名空间 namespace的值
const data = yield select((state) => state.namespaceName.valueName);

4)   call

  • Dva中 Effects 函数的固定传参
  • 第一个参数是一个异步函数,payload 是参数,可以通过 call来执行一个完整的异步请求,又因为 yield的存在,就实现了异步转同步的方案
const { data } = yield call(queryInterface, payload);

5) put

  • 发出一个 Action,类似于 dispatch
  • Dva中 Effects 函数的固定传参
yield put({ type: 'add', payload: todo });

本文章参考 http://t.csdn.cn/OnSgX

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 项目A调用项目B方法(项目架构管理)

前言 项目开发中,如果项目比较大,大多采用多项目的方式,主要是为了方便代码管理,也更开发变得更加方便。操作如下: 注:我用的版本是Qt 5.12.3 一、建立项目目录 要求: 1、项目A为主&#xff…

FreeRTOS中的任务与任务切换(笔记)

目录任务的定义栈和任务栈任务控制块任务初始化函数初始化任务栈任务创建函数pxTopOfStack任务列表初始化将任务插入到就绪列表中调度器xPortStartScheduler() 函数prvStartFirstTask()函数 (该函数是偏硬件底层的函数,用汇编语言编写,在port…

中电金信「财务公司核心系统白皮书」正式发布!

随着数字技术的深度应用,数字化转型正迎来新一轮变革。如何促进企业战略转型,助力企业发展提质增效,以标准化、数字化、精细化支撑企业实现高质量发展,已成为财务公司数字化转型的重要课题。 为推进财务公司数字化转型工作要求&a…

恢复照片软件推荐,照片恢复就这么做!

案例:好用的恢复照片软件 【作为一名摄影博主,我每天拍的照片太多了,在筛选的时候总是容易错删重要的照片,大家有什么比较好的照片恢复软件或方法可以推荐吗?万分期待!】 随着数字化时代的发展,人们越来越…

QPixmap存在的坑,内存泄漏

QPixmap加载图片的时候,会把图片数据加入到QPixmapCache缓冲区上 如果多次加载,那么内存会被吃掉越来越多 本意QPixmap是用于显示需要比较快的地方,和硬件关联 QPixmap变量之间的赋值,并不会构造新的图片数据内存,而…

基于Eclipse下使用arm gcc开发GD32调用printf

系列目录 第一章 xxx 目录 系列目录 文章目录 文章目录 系列文章目录前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结前言 开发环境:Eclipse代替Keil,IAR 开发平台:GD32 开发编译器:arm-none-eabi- …

Adobe Acrobat Pro DC 2022的系统要求

Adobe Acrobat Pro DC 2022是一款功能强大的PDF编辑和管理软件。它可以帮助用户创建、编辑、转换、签署和共享PDF文档,并提供了多种工具和功能来优化文档的可访问性、安全性和可靠性。 Adobe Acrobat Pro DC 2022功能特色: 创建和编辑PDF文档&#xff1…

《低代码PaaS驱动集团企业数字化创新白皮书》-大型集团企业的数字化困局

大型集团企业的数字化困局 现状 /态势:数字化发展动力,构建数字化竞争力,实现敏捷的运营、治理、决策、体验 数字化转型大势所趋 全球化地缘政治紧张局势,供应链、通货膨胀、劳动力短缺以及新冠疫情全球大流行更增加了人们对全球…

HLS_OPENCV库的安装

借此机会来记录一下OPENCV库的安装:   首先需要知道的是说起OPENCV库有两种,一种是OPENCV库,还有一种是Xilinx官方自己的OPENCV库,前者可以用来在HLS中进行仿真,无法进行综合,而后者则是可以进行综合的。现将两种库的…

【综述型论文】图神经网络总结

文章目录图神经网络基于模型结构分类的图神经网络1. 循环图神经网络(ResGNNs)2. 卷积图神经网络基于谱域的ConvGNNs(Spectral-based ConvGNNs)基于空域的ConvGNNs(Spatial-based ConvGNNs)谱域图卷积模型和…

Python遥感开发之FY的批量处理

Python遥感开发之FY的批量处理0 FY遥感数据1 批量提取数据2 批量拼接TIF数据3 批量HAM转WGS投影(重要)4 批量掩膜裁剪介绍FY数据的格式,以及FY数据的批量提取数据、批量拼接数据、批量投影转换、批量掩膜裁剪等操作。本博客代码参考《 Hammer…

MySQL SQL优化 【建议熟读并背诵】

插入数据 批量插入数据 insert into tb_test values(1,Tom),(2,Cat),(3,Jerry);手动控制事务 start transaction; insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); insert into tb_test values(4,Tom),(5,Cat),(6,Jerry); insert into tb_test values(7,Tom),(8,Cat…

在Windows中使用Linux命令安装这款软件就可以

由于平时经常使用Linux命令,所以导致在Windows的cmd中输入命令的时候经常打错,提示不是内部或外部命令,也不是可运行的程序。 那么有办法将补全cmd命令,使Linux中的命令在Windows中也能使用呢? 下面我来讲解如何在Win…

微服务架构-服务网关(Gateway)-服务网关在微服务中的应用

服务网关在微服务中的应用 我们将目光转向Spring Cloud应用的外围,讨论微服务架构下的各个模块如何对外提供服务。 1、对外服务的难题 微服务架构下的应用系统体系很庞大,光是需要独立部零的基础组件就有注册中心、配置中心和服务总线、Turbine异常聚…

【版本控制】Github同步Gitee镜像仓库自动化脚本

文章目录Github同步Gitee镜像仓库自动化脚本前言什么是Hub Mirror Action?1.介绍2.用法配置步骤1.生成密钥对2.GitHub私钥配置3.Gitee公钥配置4.Gitee生成私人令牌5.Github绑定Gitee令牌6.编写CI脚本7.多仓库同步推送8.定时运行脚本总结Github同步Gitee镜像仓库自动…

Softmax和Cross Entropy Loss在分类问题中的作用

本文以三分类神经网络为例,讲解Softmax和Cross Entropy Loss在分类问题中的作用。 首先,对类别标签进行一位有效编码: y[y1,y2,y3]Ty[y_{1},y_{2},y_{3}]^{T}y[y1​,y2​,y3​]T yi{1,if(iy)0,otherwisey_{i}\left\{\begin{matrix} 1 ,& …

形式语言和自动机总结----正则语言RE

第3-4章正则表达式 正则表达式的设计举例 正则表达式的运算 正则表达式的优先级 举例 1.倒数第三个字符是1 (01)*1(01)(01) 2.不含有连续的0 (101)*(0) 3.含有000 (01)*000(01&a…

【算法LearnNO.1】算法介绍以及算法的时间复杂度和空间复杂度

目录 一、算法 1、算法概述 2、算法的5个特性 3、设计算法的标准 二、时间复杂度 1、时间复杂度的介绍 2、渐进时间复杂度的求法 3、计算时间复杂度的代码举例(平方阶示例) 4、时间复杂度排序 三、空间复杂度 一、算法 1、算法概述 算法就是解…

蔚来试水辅助驾驶订阅,NOP+能否吃蟹?

作者 | 德新 编辑 | 王博2021年的NIO Day上,随着当时ET7发布,蔚来最早宣布了智能驾驶订阅服务:NAD,月费680元。 两年后,辅助驾驶订阅模式终于开始落地:蔚来将从7月1日起,对NOP进行收费&#xff…

Nginx基础教程

Nginx 目标 Nginx简介【了解】 Nginx安装配置【掌握】 一、Nginx简介 Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img ​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/P…