React状态管理比较原理

一、React状态管理库

按照23年下载使用顺序依次是:

  • Redux
  • Zustand
  • MobX
  • Recoil
  • Jotai
  • Valtio

二、各状态管理库简要概述

  1. Redux:Redux 是一个行业标准的状态管理库,它利用 flux 架构来创建不可变的数据存储。
    在这里插入图片描述

优点

  • 提供可预测的、一致的状态管理,因为状态总是通过一个称为 reducer 的纯函数,从上一个状态和派发的操作中派生出来的。
  • 便于调试和测试,因为状态和动作都是可序列化的,可以使用 devtools 或 Redux 工具包进行检查和操作。
  • 由于状态是集中化和模块化的,逻辑与用户界面组件是分离的,因此便于扩展和维护。

缺点

  • 存在大量模板代码、陡峭的学习曲线和冗长的语法。你可能需要使用 Redux Toolkit、Saga、Thunk、Reselect 或
    Immer 等其他库来简化和增强 Redux 体验。
  • 可能会带来性能问题,因为状态存储在单个对象中,随着时间的推移可能会变得越来越大、越来越复杂,如果优化不当,可能会导致组件不必要地重新渲染。
  • 可能不是简单或本地状态管理的最佳选择,因为它会给你的应用增加额外的复杂性和开销,而且可能无法利用某些 React
    功能或最佳实践,例如钩子、功能组件或不变性。

如果您热衷于在项目中使用 React Redux,那么您需要具备以下四点:

  • 动作:JavaScript 对象,代表改变应用程序状态的意图,也是将数据导入存储的唯一方法。

  • 调度器:Redux 存储中可用的函数,用于调度动作。当动作被分派后,Redux 会将该动作传递给还原器以计算新状态。

  • Reducers:将当前状态和动作作为参数并返回应用程序下一状态的纯函数。

  • Store:状态是所有应用数据的唯一来源。

  1. MobX :MobX 是一个库,它利用可观察对象和代理的强大功能来创建可直接写入或读取的反应式可变数据源。

【参考文档】
第3212期
第3139期
flux架构

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第三、四章 if语句 + 循环

第三章 if语句 bool类型 两种:True和False bool_1 True bool_2 False print(f"bool_1变量的内容是:{bool_1}," f"类型是:{type(bool_1)}") print(f"bool_2变量的内容是:{bool_2}," f"类…

内容创作策略:打造影响力强大的技术博客

CSDN的朋友你们好,我是未来,今天给大家带来专栏【程序员博主教程(完全指南)】的第6篇文章——“博客内容创作策略”。本文为技术博主提供了一个精简的内容创作策略指南,涵盖了设定目标、分析竞争、关键词研究、内容规划…

包拯断案 | 集群备份续集:三招解决定时备份延迟@还故障一个真相

今天,小编给大家讲述自己亲身遇到的一个数据库集群备份问题,希望帮助DBA运维的你绕开这个烦恼,轻松找到答案! 1、数据库集群在进行定时备份时(从节点备份),出现了主从延迟较大的告警&#xff0c…

Jmeter 性能-稳定性测试TPS计算

1、普通计算公式 TPS 总请求数 / 总时间按照需求得到基础数据,比如在去年第xxx周,某平台有5万的浏览量那么总请求数我们可以估算为5万(1次浏览都至少对应1个请求) 总请求数 50000请求数 总时间:由于不知道每个请求…

Java研学-RBAC权限控制(二)

三 PageHelper 1 分页所需 // 原分页所需 1. 定义QueryObject类,传递分页参数,currentPage,pageSize,get start();方法 2. selectForCount()方法,总条数小于等于0说明不需要分页,大于0说明可以分页 3. se…

“揭秘性能测试工具:优化软件性能的关键秘籍“

性能测试工具的设计宗旨是为了模拟用户对软件应用程序或系统的各种操作,旨在评估关键的性能指标,包括响应时间、吞吐量、并发能力和资源利用率。 通过这些工具模拟的多用户环境,我们能够产生与实际工作负载相似的条件,并监测系统…

OpenCV4.9更多形态转换

返回:OpenCV系列文章目录(持续更新中......) 上一篇:OpenCV4.9处理平滑图像 下一篇:OpenCV4.9更多形态转换 基于这两者,我们可以对图像进行更复杂的转换。在这里,我们简要讨论 OpenCV 提供的 5 个操作: …

使用Docker部署Node.js

第一步:在Node.js项目的根目录中新建Dockerfile文件 # 使用官方 Node.js 镜像作为基础镜像 FROM node:latest# 设置工作目录 WORKDIR /usr/src/app# 将项目文件复制到容器中 COPY . .# 将npm源设置为淘宝镜像 RUN npm config set registry https://registry.npmmir…

Cuda编程-NPP库

Cuda编程先前有过研究,现在记录下Cuda相关的库使用 目录 0.参考文档1.NPP简介1.1 头文件1.2 库文件1.3 编译时链接关系1.4 NPP函数的命名方式1.5 General Conventions 一般约定1.6 Image Processing Conventions 图像处理约定 2.举例:NPP实现YUV转BGR2.1…

Day 20 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉…

苍穹外卖开发笔记(1.项目介绍和开发环境)

目录 一、项目介绍二、环境搭建1、web管理端前端部署2、后端环境搭建3、数据库搭建4、前后端联调5、导入接口文档 三、完善登录功能四、学习知识1、前端发送的请求,是如何请求到后端服务的? 一、项目介绍 二、环境搭建 由于本项目主要点在于学习后端开发…

头歌-机器学习 第13次实验 特征工程——共享单车之租赁需求预估

第1关:数据探索与可视化 任务描述 本关任务:编写python代码,完成一天中不同时间段的平均租赁数量的可视化功能。 相关知识 为了完成本关任务,你需要掌握: 读取数据数据探索与可视化 读取数据 数据保存在./step1/…

如何使用Android手机通过JuiceSSH远程访问本地Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

SSL中的CA证书

目录 一、CA概述 二、数据加密 三、身份认证 一、CA概述 SSL如何保证网络通信的安全和数据的完整性呢?就是采用了两种手段:身份认证和数据加密。身份认证就需要用到CA证书。 CA是证书的签发机构,它是公钥基础设施(Public Key In…

Python --- Python + Vs code的安装与使用(windows平台)

Python Vs code的安装与使用 今天是我第一次开始尝试用Python,然后我想借此机会记录一下整个安装过程和上手过程。之前一直都是用的matlab,这个东西不仅大而且收费,但不可否认的是。matlab的很多东西都做的比较好,但我一直用的都…

经典文章:卷积神经网络的运作原理

https://brohrer.mcknote.com/zh-Hans/how_machine_learning_works/how_convolutional_neural_networks_work.html 参考资料 https://aitechtogether.com/article/38900.html https://www.ruanyifeng.com/blog/2017/07/neural-network.html http://neuralnetworksanddeeplea…

企业工商信息查询API接口有哪些

当今社会我们几乎每天都在和一些企业打交道,有时候需要确认下这家企业经营范围,注册地址等信息,那怎么办呢,这个时候就需要一些企业工商信息查询的API接口了。 有的时候你可以只知道这家公司的大概企业名称,比如数脉&…

springboot-开源项目-追踪法-简单有效,从F12到SQL数据库表

使用的技术栈:springbootmybatis,edge浏览器 插件:MybatisX 第一步: 按F12,选择网络 第二步: 进入IDEA编辑器,键盘按两次shift键,点击第一个,快速定位到该操作 3: 我…

锐化空间滤波器(提高清晰度的另一种方式)

书上一阶微分的定义可以理解,毕竟这里不死数学上的曲线的概念,而是像素点上的曲线。所以,不同于数学的严格单调递增曲线的导数是大于等于零,这里的严格单调递增曲线,只能是大于零。 至于二阶微分的定义,就…

子线程中创建 handler导致okhttp请求失败,从 ScheduledExecutorService 挖的坑开始

子线程创建方法1: ScheduledExecutorService schedulePool Executors.newScheduledThreadPool(2);schedulePool.schedule(new Runnable() {Overridepublic void run() {dorequest();}}, 2, TimeUnit.SECONDS); 子线程创建方法2: new Thread(new Runnab…