Redux,react-redux,dva,RTK

1.redux的介绍

Redux – 李立超 | lilichao.com

2.react-redux

1)react-Redux将所有组件分成两大类  

  1. UI组件
      1. 只负责 UI 的呈现,不带有任何业务逻辑
      2. 通过props接收数据(一般数据和函数)
      3. 不使用任何 Redux 的 API
      4. 一般保存在components文件夹下
  2. 容器组件
      1. 负责管理数据和业务逻辑,不负责UI的呈现
      2. 使用 Redux 的 API
      3. 一般保存在containers文件夹

2)react-redux相比较于react的不同,在于它提供了一些api来方便我们使用redux,

        1.Provider 组件: Providerreact-redux库提供的顶层组件,它可以包裹整个React应用。通过Provider,Redux的store可以被传递给整个React组件树,使得所有的组件都能够访问Redux的状态。

        2.connect 函数: connectreact-redux提供的函数,它可以连接React组件与Redux的store,并在组件中注入Redux的状态和操作。这样,组件就能够通过props直接访问Redux中的状态,而不需要手动订阅状态变化或分发actions。

代码示例:(还是以一个简单的计数器作为例子)

         创建Redux store 和 reducer:

// 文件:store.js
import { createStore } from 'redux';const initialState = {count: 0,
};const counterReducer = (state = initialState, action) => {switch (action.type) {case 'INCREMENT':return { ...state, count: state.count + 1 };case 'DECREMENT':return { ...state, count: state.count - 1 };default:return state;}
};const store = createStore(counterReducer);export default store;

          创建React组件,使用react-redux中的connect函数连接React组件与Redux store:

// 文件:Counter.js
import React from 'react';
import { connect } from 'react-redux';const Counter = ({ count, increment, decrement }) => (<div><p>Count: {count}</p><button onClick={increment}>Increment</button><button onClick={decrement}>Decrement</button></div>
);const mapStateToProps = (state) => ({count: state.count,
});const mapDispatchToProps = (dispatch) => ({increment: () => dispatch({ type: 'INCREMENT' }),decrement: () => dispatch({ type: 'DECREMENT' }),
});export default connect(mapStateToProps, mapDispatchToProps)(Counter);

      在应用的入口文件中,使用Provider组件将Redux store传递给整个应用: 

// 文件:index.js
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import Counter from './Counter';const App = () => (<Provider store={store}><Counter /></Provider>
);ReactDOM.render(<App />, document.getElementById('root'));

3.dva.js

1)dvajs,全称是"DvaJS",是一个基于React和Redux的前端应用框架。它是一个由阿里巴巴出品的框架,旨在简化React应用的开发流程,尤其是在状态管理方面。DvaJS借鉴了Redux的思想,但在其基础上进行了封装,提供了一些方便开发的额外特性。

官网:快速上手 | DvaJS

与传统的Redux和React-Redux相比,DvaJS 提供了更加简化和约定的开发方式,主要包括以下几个核心概念:

  1. Model: DvaJS引入了Model的概念,将数据、业务逻辑和界面表现进行了组织。一个Model包括state、reducers、effects等内容,使得相关的代码可以更容易地维护在一起。

  2. Effects: Effects是用于处理异步操作(例如数据请求)的地方。在DvaJS中,Effects通过Redux-saga来处理异步流程,使得异步逻辑更加清晰。

  3. Reducer和Action的简化: DvaJS封装了Redux的Reducer和Action的创建,通过一些简单的约定,减少了编写冗长的Reducer和Action的代码。

  4. Router的集成: DvaJS内置了React-Router,使得路由的管理变得更加简单。

计数器实例:

// models/counter.js
export default {namespace: 'counter',state: 0,reducers: {increment(state) {return state + 1;},decrement(state) {return state - 1;},},
};// index.js
import React from 'react';
import dva from 'dva';
import { connect } from 'dva';
import Counter from './Counter';// 创建dva应用
const app = dva();// 注册Model
app.model(require('./models/counter').default);// 注册路由
app.router(() => <Counter />);// 启动应用
app.start('#root');

  4.RTK

Redux Toolkit(RTK) – 李立超 | lilichao.com

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

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

相关文章

python 自动发送邮件

对于工作中&#xff0c;如果每日需要发送具有规律性的邮件&#xff0c;采用python自动发送可以节约很多时间&#xff0c;提高效率。本文主要以腾讯企业邮箱为例&#xff0c;介绍python自动发送邮件&#xff08;含附件&#xff09;的功能。为保护隐私&#xff0c;代码中的邮箱及…

Edge调用Aria2下载

一、准备工作 1、Edge浏览器&#xff1a;Windows系统自带或点击下载&#xff1b;   2、Aria2 gui&#xff1a;点击github下载或自行搜索下载其他版本&#xff1b; 二、启动Aria2 gui 解压下载的Aria2 gui到任意目录&#xff0c;点击“Aria2c启动器”或“AriaNg启动器”皆可。…

jps 这个 Java 工具不存在怎么办

如果在系统中没有找到 jps 这个 Java 工具&#xff0c;通常是因为 Java 安装不完整或者相关的环境变量配置不正确。jps 是 Java Virtual Machine Process Status Tool&#xff0c;用于显示 Java 进程信息。 以下是一些解决方法&#xff1a; 1. 确认 Java 安装&#xff1a; 确…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《“无废”电–氢充能服务区多源微网优化运行模型》

这个文章标题涉及到“无废”电–氢充能服务区、多源微网和优化运行模型。下面我将对标题中的关键术语进行解读&#xff1a; “无废”电–氢充能服务区&#xff1a; 无废电&#xff08;Waste-free electricity&#xff09;&#xff1a; 这可能指的是通过某种方式生产的电力&…

从零开始学习 JS APL(六):完整指南和实例解析

学习目标&#xff1a; 1. 能够利用正则表达式校验输入信息的合法性 2. 具备利用正则表达式验证小兔鲜注册页面表单的能力 学习内容&#xff1a; 正则表达式 综合案例 阶段案例 学习时间&#xff1a; 周一至周五晚上 7 点—晚上9点周六上午 9 点-上午 11 点周日下午 3 点-下…

短视频系统设计:如何支持三千万用户同时在线看视频?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 短视频&#xff08;short video&#xff09;通常时长在 15 分钟以内&#xff0c;主要是在移动智能终端上进行拍摄、美化编辑或加特效&#xff0c;并可以在网络社交平台上进行实时分享的一种新型视频形式。短视频具有时…

地图服务 ArcGIS API for JavaScript基础用法全解析

地图服务 ArcGIS API for JavaScript基础用法全解析 前言 在接触ArcGIS之前&#xff0c;开发web在线地图时用过Leaflet来构建地图应用&#xff0c;作为一个轻量级的开源js库&#xff0c;在我使用下来Leaflet还有易懂易用的API文档&#xff0c;是个很不错的选择。在接触使用Ar…

简单地将附件POST到Notes应用中

大家好&#xff0c;才是真的好。 这半年我们会讲很多开发知识&#xff0c;这篇紧接上篇《通过URL将HTML表单数据创建到Domino应用中》&#xff0c;讲述如何将附件POST到Note应用中。 原理是一样&#xff0c;首先&#xff0c;你得有一个表单&#xff0c;我们用html写一个&…

Android 缩减、混淆处理和优化应用

为了尽可能减小应用的大小&#xff0c;您应在发布 build 中启用缩减功能来移除不使用的代码和资源。启用缩减功能后&#xff0c;您还会受益于两项功能&#xff0c;一项是混淆处理功能&#xff0c;该功能会缩短应用的类和成员的名称&#xff1b;另一项是优化功能&#xff0c;该功…

云HIS:新一代云架构医院信息管理系统源码(java语言)

云HIS信息管理云平台&#xff0c;提供全方位的临床系统应用&#xff0c;是国内领先的以云计算为基础&#xff0c;以云计算赋能医疗机构&#xff0c;是颠覆传统医疗信息化业态的技术与模式创新&#xff0c;以SaaS方式&#xff0c;为医疗机构提供信息系统服务&#xff0c;满足从医…

HashMap系列- key到i的转换

1.key转换成hash >>>表示无符号的右移&#xff1a;按照二进制把数字右移指定数位&#xff0c;高位直接补零&#xff0c;低位移除。 ^&#xff08;按位异或运算&#xff09;&#xff1a;运算规则&#xff1a;相同的二进制数位上&#xff0c;数字相同&#xff0c;结果…

Deep Learning(wu--84)调参、正则化、优化--改进深度神经网络

文章目录 2偏差和方差正则化梯度消失\爆炸权重初始化导数计算梯度检验OptimizationMini-Batch 梯度下降法指数加权平均偏差修正RMSpropAdam学习率衰减局部最优问题 调参BNsoftmax framework 2 偏差和方差 唔&#xff0c;这部分在机器学习里讲的更好点 训练集误差大&#xff…

基数排序简单了解

基数排序是根据数字每一位从低到高去进行分类排序的 比如对于数组[1, 11, 2, 12]&#xff0c;从个位数开始&#xff0c;1和11分到了桶1&#xff0c;2和12分到了桶二&#xff0c;接着十位数&#xff0c;1和2分到了一桶&#xff0c;但由于在上一次分桶中&#xff0c;2在1之后&am…

【生信分析】基因组学导论

由于工作需要&#xff0c;现在开始跨行学生信&#xff01; 祝我成功 目标&#xff1a;通过一周的学习能对对不同高通量测序数据集&#xff08;RNA-seq、ChIP-seq、BS-seq 和多组学集成&#xff09;进行分析。 配置环境 if (!requireNamespace("BiocManager", quiet…

详解ES6中的symbol

ES6 引入了一种新的原始数据类型 Symbol&#xff0c;表示独一无二的值。 Symbol的值是唯一的&#xff0c; 用来解决命名冲突的问题; 它是JavaScript 语言的第七种数据类型&#xff0c;是一 种类似于字符串的数据类型&#xff1b; 特点如下&#xff1a; 创建唯一值&#xff1…

二叉树的前、中和后序遍历的递归与迭代实现

1. 前序遍历 1.1 递归 /*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val (valundefined ? 0 : val)* this.left (leftundefined ? null : left)* this.right (rightundefined ? null : right)* }*/ /*** param …

Vue学习笔记-activated和deactivated生命周期

作用 路由组件所独有的2个生命周期 activated生命周期函数用于在路由组件每次由消失到出现时所调用的函数deactivated生命周期函数用于路由组件每次由出现到消失时&#xff08;无论是否缓存&#xff09;所调用的函数 案例 定义一个NewsVue组件&#xff0c;要求&#xff1a;…

PyTorch分布式overview

PyTorch分布式overview 文章目录 PyTorch分布式overviewtorch.nn.DataParallel分布式数据并行训练(DistributedDataParallel)接触DDP, 从这个例子开始分布式数据并行(DistributedDataParallel)基本用例(Basic Use Case)Setup 单机的模型并行最好的实践DataParallel和Distribute…

C语言能判断一个变量是int还是float吗?

C语言能判断一个变量是int还是float吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C语言从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

C语言词法陷阱

目录 前言 1、理解函数声明 最简单的声明符 函数和指针类型 其它组合 typedef简化 2、运算符优先级 C语言运算符优先级表 补充内容 3、作为语句结束标志的分号 多写分号 漏写分号 分号与函数声明 4、switch语句 5、函数调用 6、“悬挂”else引发的问题 前言 …