React中Dva状态管理(model)的使用总结和理解

dva 框架介绍 dva 是基于 redux 最佳实践 实现的 framework,简化使用 redux 和 redux-saga 时很多繁杂的操作 数据流向 数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State ,如果是异步行为(副作用)会先触发... 阅读详情
AI摘要

本文介绍了如何使用Dva进行React全局状态管理,指出Redux虽然被广泛推荐,但学习成本高,而Dva则提供了更简洁的解决方案。通过环境搭建、创建model文件和页面组件,展示了Dva中namespace、state、reducers和effects的使用方法。并提供了通过connect连接组件及操作state的示例,帮助读者快速掌握Dva的使用技巧。

一 概述

React中全局状态管理官方推荐使用Redux,Redux的使用场景其实在单个应用中是处于使用率只有20%,却有80%的学习成本。可是说是React全家桶中最难理解的部分了,相信很多人学习它时,各个概念整很迷糊。我就是要放弃Redux的时候,了解React-redux和redux-saga, 它们是对redux的简化处理工具。可他们配置和文件结构,依然麻烦。直到Dva(低洼)的出现将React全局状态管理简化到了极致。那么今天带大家一起快速学习下Dav中全局状态的使用技巧,本篇文章仅仅是对使用方式的个人理解。

由于时间关系,测试内容可能有误,请看官主要理解总结中的内容。

二 环境搭建

本次演示环境使用UmiJs搭建,因为Dva已经很久不维护了,并且已经交由Umi管理,所以使用Umi来创建React项目是目前最方便的。参考官网环境搭建好后:如下

 三 使用

3.1 创建model文件

默认src/models下创建的所有符合model规范的文件都会自动注册到umijs中。创建src/models/users.js,

import {apiUserList} from '@service/user.js'
export default {
    namespace: 'users',
    state: {
        name: ''
    },
    effects: {
        *fetchUserName({ payload }, { call, put }) {
            const userName = yield call(apiUserList, payload)
            yield put({ type: 'setName', payload: userName })
        },
    },
    reducers: {
        setName(state, { payload }) {
            return {
                ...state,
                name: payload
            };
        },
    },
};

 创建src/pages/user.jsx

import React from 'react';
import { connect } from 'dva';

const users = ({ dispatch, userName }) => {
  const setUserName = () => {
    dispatch({
      type: 'users/setName',
      payload: '我小桃',
    });
  };

  return (
    <>
      <div>用户页面{userName}</div>
      <button onClick={setUserName}>点我修改</button>
    </>
  );
};

const mapStateToProps = (state) => {
  console.log(state);
  return {
    userName: state.users.name,
  };
};

export default connect(mapStateToProps)(users);

运行yarn start

个人使用总结:

model的使用

1. namespace

【命名空间】是外部分发(dispatch)调用model时,actions里type属性的前缀,后面跟reducers或effect的方法名。使用示例如下。model内部调用方法使用时可是省略前缀。

dispatch({
  type: 'users/setName',
  payload: '我小桃',
})

2. state

存储全局变量的仓库,核心使用的就是state,却是最简单理解的。结构对象和数组都可。

3. reducers

方法签名(state是状态,payload是分发时传的参数)

setName(state, { payload }) {}

唯一操作state的地方(CURD),即可对内(effects使用)也可对外。外部想要写state可以直接dispatch到reducers的方法来进行操作state。由于外部组件通过connect后可以获取(读)state的值,所以写操作必须使用dispatch。当然如果外部组件涉及到异步操作,比如删除用户是异步的话,这种情况往往实践都是直接dispatch到effects方法。而effects方法要处理需要分两步走:(1)调用异步接口删除用户数据(2)model内部dispatch到reducers的方法,让reducers删除state数据。

4. effects

使用示例

*fetchUserName({ payload }, { call, put }) {
  const userName = yield call(apiUserList, payload)
  yield put({ type: 'setName', payload: userName })
},

最佳实践,一般是做异步业务CRUD,调用接口后再调用reducers中的方法来重新设置state。往往是方便外部组件使用,外部只调用effects方法就完成2部操作操作接口和操作state。其实也可以外部组件自己调用异步接口,之后再dispatch到reducers,这样就能省下一个effects,看个人喜好推荐使用effects。

方法签名(①payload是外部dispatch时传的参数;②call是可以调用接口的方法,call调用接口时第一个参数是调用接口的方法名称,第二个参数是调用接口的参数;③put是effects特有的方法,类似外部调用的dispatch。dispatch和put参数数都是Action对象(Action对象包含type属性和payload属性)


外部组件使用model

1. 引入dva连接器

import { connect } from 'dva';

2. 使用连接器连接组件

export default connect(mapStateToProps)(组件名称);

3. 定义一个model中的state转为组件props的方法(方法返回值会赋值给props);

const mapStateToProps = (state) => {
  console.log(state);
  return {
    userName: state.users.name,
  };
};

4. 组件props自带dispatch方法和第三步转化后的属性

使用state

组件内部如果使用state,可以直接通过转化方法间接使用state。

const 组件 = ({ dispatch, userName }) => {
    
}

操作state

(1)如果需要异步修改数据库和state则可以dispatch到effects方法

(2)如果仅仅修改state不做接口调用,则dispatch到reducers方法即可。

dispatch({
  type: '[namespace]/effects或reducers的方法名称',
  payload: '我小桃',
});

(完~)

umi4使用状态管理dva 【代码】umi4使用状态管理dva。 阅读详情

相关推荐

React最佳实践系列 —— 循序渐进理解 Dva中的model概念

Dva最佳实践 -- 循序渐进理解 dva中的model概念一. 序二. 在create-react-app中使用redux1. 开始2. 安装redux三.异步action四. Dva中的model五. subscriptions属性 作者: DocWhite白先生 一. 序 在dva框架中model的出现,帮助开发者不比在新建项目的时候每次都要一次安装配置和React-Router, R...

白先生的博客 7751

React--Umi和Dva

Umi 以路由为基础,解决了之前使用react-router-dom的时候使用路由的复杂度); ​ dva 是一个基于 redux 和 redux-saga 的数据流方案 ​

qq_44930306的博客 5199

react-model:React的下一代状态管理库

React模型· React的状态管理库 :party_popper: 同时支持Class和Hooks Api :atom_symbol: 支持 ,React本地和Next.js :crossed_swords: 全面的TypeScript支持 :package: 内置微束 :gear: 中间件Pipline(redux-devtools支持...) :umbrella: 100%的测试覆盖率,生产安全 :bug: 在测试环境上轻松调试 import { Model } from 'react-model' // define model const Todo = { state : { items : [ 'Install react-model' , 'Read github docs' , 'Build App' ] } , actions : { add : todo => { // s is the readonly version of s

react dva实现

dva dva是一个基于redux和redux-saga的数据流方案,然后为了简化开发体验,dva额外内置了react-router,fetch,可以激烈为一个轻量级的应用框架。 使用dva 定义一个模型,有点像redux-toolkit。 使用connect连接 像redux的connect一样连接。 启动。 然后如何派发action。 通过对应的指令找到对印的reducer,派发。 dva的基本操作就是这样,使用起来比较轻便。 实现dva ...

lin_fightin的博客 1930

从ResNet到EfficientNet:特征金字塔网络(FPN)在不同骨干网中的适配指南

本文深入探讨了特征金字塔网络(FPN)与ResNet、VGG、EfficientNet等主流骨干网络的适配策略。文章详细解析了FPN的核心原理,并针对不同骨干网络的特征提取特性,提供了通道对齐、参数量估算及迁移学习的系统化指南,旨在帮助开发者在目标检测等视觉任务中构建高性能、高效率的模型。

weixin_29047919的博客 220

别再拍脑袋估工时了!手把手教你用FPA功能点分析法,给软件项目算笔明白账

本文详细介绍了FPA功能点分析法在软件开发工作量评估中的应用,帮助团队告别拍脑袋估算。通过量化系统功能组件,FPA提供客观的工时和成本预估,特别适合需求不明确的项目初期。文章以财务系统为例,拆解FPA计算流程,并分享实用估算模板,助力技术管理者提升项目规划能力。

weixin_42614269的博客 386

公众号项目如何让没登录的用户点击页面操作都会跳转到登录react dva subscriptions

我们的公众号使用的技术栈是react+umi+dva pages下有用户不需要登录可访问的页面,也有页面是没登录情况下进行任何点击操作将会跳转到登录 于是就有了react dva subscriptions 使用教程指南 dva中我们可以在 Model 中实现事件监听, model 中的 subscriptions 相当于一个监听器,可以监听路由变化,鼠标,键盘变化,服务器连接变化,状态变化等,这样在其中就可以根据不同的变化做出相应的处理,在这个 subsriptions 中的方法名是随意定的,每次变

qq_36528523的博客 814

Multisim仿真运放积分器踩坑实录:为什么你的方波变不成三角波?

本文针对Multisim仿真运放积分器时方波无法转换为三角波的常见问题,提供了详细的排查与调试指南。文章指出,经典RC积分电路因直流反馈开路导致运放饱和,核心解决方案是在反馈电容两端并联大阻值电阻以稳定直流工作点。通过参数优化(调整Rin、C、Rf)和高级仿真技巧,手把手教你调出线性度好、幅度适中的完美三角波,并分享异常波形(如饱和、不对称、振荡)的对应策略。

weixin_29231263的博客 113

轻松学 dva(基础 + 进阶)(32 个视频)

dva 是 React 的国产最佳实践框架,本套课程是讲解 dva 的最全入门指引教程,从入门,到进阶,讲解 dva 的方方面面的知识。 总播放时长:175 分钟 轻松学 dva(基础 + 进阶) #1 什么是 dva「05:49」 轻松学 dva(基础 + 进阶) #2 如何来学习 dva 与它的学习资源推荐「05:44」 轻松学 dva(基础 + 进阶) #3 dva-cli 的安装与使用「0...

weixin_33695450的博客 780

基于springboot生鲜食品订购系统的设计与实现

近年来互联网络的迅猛发展和电子终端设备的普及,赋予了各行业充足的发展空间。微信小程序的O2O生鲜食品订购相比于传统信息技术,时效性是它最大的特色,已经在电子娱乐、经济等中发挥着举足轻重的作用。短时间内迅速扩大了线上管理系统的规模。尽管O2O生鲜食品订购已经有了很大程度的发展,但在微信小程序的O2O生鲜食品订购领域上却少有建设。

1023

Matlab2018a崩溃解决的办法No sandbox or build area path

Matlab 2018a (No sandbox or build area path)出现崩溃后需要使用terminal进行如下操作: cd /home/david/MySoft/MATLAB/R2018a/bin/glnxa64 (你的matlab路径) mkdir exclude mv libfreetype* exclude/ 执行后图片如下: 如果你用的Windows系统,请手动按照上面步骤剔除了dll。 Matlab 2018a (No sandbox or build are

David Xiao 1万+

React中的状态管理Dva总结

在React开发中,随着应用复杂度的增加,状态管理变得尤为重要。Redux虽然强大,但其学习曲线陡峭且配置繁琐。为此,AntDesign团队推出了DVA,一个基于Redux和redux-saga的轻量级状态管理框架,旨在简化开发流程。DVA采用Model-View-Action(MVA)模式,将数据流、视图渲染和业务逻辑封装成独立的模型,每个模型包含状态、同步操作和异步操作。DVA的核心概念包括Model、View、Action和Effect,通过Redux store管理状态,使用redux-saga处理

caixin185的博客 1225

Transformer模型在时间序列预测中的应用:价格和产量预测

Transformer模型由Attention is All You Need论文提出,并在机器翻译任务上取得了巨大成功。其主要特点是使用自注意力机制代替传统的递归或卷积操作进行序列建模。Transformer模型由编码器和解码器组成,其中编码器用于学习输入序列的表示,解码器用于生成目标序列。在时间序列预测中,我们只需要使用Transformer的编码器部分。编码器将历史数据作为输入,学习一个表示,然后使用该表示来预测未来的数值。

HnrzLinux的博客 736

umi+dva model的数据管理教程

阅读本文章需有以下基础 1.react 2.dva 3.umi 本文主要是使用umi+dva完成仓库管理,model文件的结构、写法,connect怎么把model的数据和组件关联,数据之间如何传递修改等问题。 (本人也在学习中,以下内容经供参考,可能存在一些问题,欢迎指正) 一、dva是基于redux、redux-saga和react-router的轻量级前端框架 我简单的理解为redux用于处理仓库的同步数据,redux-sage用于处理仓库的异步数据,react-router用于页面跳转。dva官网h

qq_34297738的博客 4651

100天精通Python(可视化篇)——第98天:Pyecharts绘制多种炫酷日历图参数说明+代码实战

一、日历图介绍 二、基础配置 1. 配置项类 2. 添加函数 3. 日期标签配置 4. 坐标系配置 三、日历图实战 1. 基础日历图 2. 日历热图

努力让自己发光,对的人才能迎着光而来 2万+

Vibe coding 氛围编程:编程就像聊天一样,低代码开发时代来了?

Vibe coding:编程就像聊天一样,低代码开发时代来了!

Code_流苏:在代码中寻诗意,在实践中觅真知 4802

Umi + Dva (model数据使用教程demo)

React 不多说,3大框架之一; Dva 是由阿里架构师 sorrycc 带领 team 完成的一套前端框架,在作者的 github 里是这么描述它的:“dva 是 react 和 redux 的最佳实践”。现在已经有了自己的官网https://dvajs.com; Antd 是阿里的一套开箱即用的中台前端/设计解决方案,UI框架,官网http://ant-design.gitee.io...

会点php的前端小渣渣 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

react @connect的作用简单理解(dva @connect)

1.react(dva)里的@connect(connect)方法,可以把models文件夹里的js文件里的state参数装入this.props里面,根据namespace装入2.后续使用时,可以从this.props里拿出来用3.可以把自己写的js文件的state参数装入,也可以把框架实现的state参数装入,供后续使用。(例如上方的loading。

BHSZZY的博客 6833

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Dva框架开发react项目理解

Dva整体理解 前言 README.md 欢迎阅读,本文档将带你了解dva的整体思路。 介绍 应用 dva 框架搭建平台,dva 是基于 redux 最佳实践实现的framework,简化使用 redux 和redux-saga 时很多繁杂的操作。 dva 文档比较健全,可以访问https://github.com/dvajs/dva-docs/blob/master/v1/zh...

annroy的博客 6548

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

umi+dva的简单使用

umi+dva

weixin_44941697的博客 4391

Umi +React + dva + Ant Design Pro 的项目学习(六) Umi中Dva的使用

Umi中Dva的使用0.Dva1.文件位置2.Model结构3.创建Ui组件并连接4.完善Modelnamespacestateeffectreducers5.Ui组件获取数据6.效果 0.Dva Dva其实就是一个管理数据流的框架,学React的时候我们会发现各种组件之间传参,会通过状态上升,也就是props,上层调用下层,但是如果有好几层,就会使得这个数据传输过程十分繁琐,于是就有了Dva,类似于我们的一个数据中心管理。   1.文件位置 符合以下规则的文件会被认为是 model 文件,一个m

Biu_Destiny的博客 1764

好不容易找到的一篇dva教程

看其他的看的一头雾水,找到一篇比较清晰的 Dva.js 入门级教学文档 Dva.js 入门级教学文档 总体介绍本文的框架 一、介绍 二、环境搭建和使用 三、全局架构 四、Model 包下文件架构 五、connect 连接 Model 和 Route 页面下的数据 六、初始化数据 和 Model 数据比对 七、数据显示和操作的流程 八、稍复杂概念 一、介绍 1、什么是 dva React 应用级框架,将 React-Router + Redux + Redux-saga 三个 React 工具库包装在一起,简

旭旭1998的博客 7万+

前端之Dva 和 Umi

Dva和Umi都是基于React的前端开发框架。Dva是一个基于Redux和React-Router的轻量级框架,提供了简洁的数据流方案和路由管理;而Umi是一个可插拔的企业级前端应用框架,内置了路由、构建、部署等功能,让前端开发更高效。

星辰迷上大海的博客 2709

React 第十一章 Dva

数据的改变发生通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的,当此类行为会改变数据的时候可以通过 dispatch 发起一个 action,如果是同步行为会直接通过 Reducers 改变 State。是一个基于 redux 和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。如果是异步行为(副作用)会先触发 Effects 然后流向 Reducers 最终改变 State。

aXin_li的博客 1815

create-react-app结合dva.js1-搭建项目整合dva.js

create-react-app结合dva使用 dva: dva 首先是一个基于redux和 redux-saga 的数据流方案,然后为了简化开发体验,dva 还额外内置了 react-router 和 fetch,所以也可以理解为一个轻量级的应用框架。 dva数据流向图 创建项目 弹出配置npm run eject 导入dva.js 安装dva cnpm install dva --save 在src目录下新建views文件夹, 用来存放页面组件 在views文件夹下, 新建一个Page1.jsx文

wx1035589113的博客 877

dva( 轻量级的应用框架 )

dva

weixin_60968779的博客 4670
上一篇: Linux VIM命令操作指南
下一篇: Java使用POI生成带验证数据的Excel(POI创建带下拉数据的单元格)
小流至江河
博客等级 码龄9年 223粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值