11. vue pinia 和react redux、jotai对比

对比 Vue 的 Pinia,和 React 的 Redux、Jotai,分中英文简要介绍、特性、底层原理、使用场景。

  1. 简单介绍

1.1 Pinia(Vue)
• 英文:Pinia is the official state management library for Vue 3, designed to be simpler and more modular than Vuex.
• 中文:Pinia 是 Vue 3 官方推荐的状态管理库,比 Vuex 更简洁和模块化。

1.2 Redux(React)
• 英文:Redux is a predictable state container for JavaScript apps, widely used in React for managing complex state.
• 中文:Redux 是一个可预测的状态容器,广泛用于 React 中管理复杂状态。

1.3 Jotai(React)
• 英文:Jotai is a primitive and flexible state management library for React, based on atomic state concepts.
• 中文:Jotai 是一个基于原子状态概念的极简灵活状态管理库,专为 React 设计。

  1. 特性对比

2.1 Pinia
• 模块化设计,支持多个 store,状态、getter、action 分明。
• 直接使用响应式 API,语法简洁。
• 支持热重载、Devtools 集成好。
• 类型友好,支持 TypeScript。
• 状态集中管理,方便组件共享。

2.2 Redux
• 中央化状态管理,所有状态集中存储。
• 依赖 action 和 reducer 来修改状态,模式较为严格。
• 有丰富的中间件(middleware)支持异步操作。
• 社区成熟,生态丰富,适合大型复杂项目。
• 需要较多样板代码(boilerplate),学习曲线较陡。

2.3 Jotai
• 极简设计,每个状态是独立的“atom”。
• 免去 reducer、action,直接通过 Hook 操作状态。
• 支持派生状态(类似 computed)和异步状态。
• 细粒度状态更新,性能优异。
• 轻量且灵活,适合中小型项目或追求简洁的场景。

  1. 底层原理简述

3.1 Pinia
• 基于 Vue 3 的响应式系统(Proxy + reactive)。
• Store 中的 state、getter、action 都是响应式对象或函数。
• 利用 Vue 的响应式追踪实现组件自动更新。

3.2 Redux
• 使用单一不可变状态树(single immutable state tree)。
• 通过纯函数 reducer 计算新状态,保证状态不可变。
• 触发 dispatch(action) 更新状态,触发订阅者重新渲染。
• 使用中间件实现异步处理(如 redux-thunk、redux-saga)。

3.3 Jotai
• 状态被封装成独立的 atom,彼此解耦。
• 利用 React 的 Hooks 和 Context 实现状态共享。
• 支持同步和异步 atom,支持状态派生。
• 组件只订阅使用的 atom,减少不必要渲染。

  1. 使用方式简述

4.1 Pinia

import { defineStore } from ‘pinia’

export const useCounterStore = defineStore(‘counter’, {
state: () => ({ count: 0 }),
actions: {
increment() { this.count++ }
}
})

组件中调用:

const counter = useCounterStore()
counter.increment()

4.2 Redux

// 定义 reducer
const counterReducer = (state = { count: 0 }, action) => {
switch(action.type) {
case ‘INCREMENT’: return { count: state.count + 1 }
default: return state
}
}

// 创建 store
const store = createStore(counterReducer)

// 组件中使用
store.dispatch({ type: ‘INCREMENT’ })

通常结合 React-Redux 的 useSelector 和 useDispatch。

4.3 Jotai

import { atom, useAtom } from ‘jotai’

const countAtom = atom(0)

function Counter() {
const [count, setCount] = useAtom(countAtom)
return <button onClick={() => setCount(count + 1)}>{count}
}

  1. 适用场景

5.1 Pinia
• Vue 3 项目,尤其需要模块化和灵活状态管理。
• 中小型到大型项目均适用。
• 需要集成 Devtools,响应式状态管理。

5.2 Redux
• React 大型复杂项目,状态非常集中和共享的应用。
• 需要严格状态管理流程和中间件支持异步任务。
• 需要社区生态丰富的解决方案。

5.3 Jotai
• React 项目,追求极简且灵活的状态管理。
• 组件状态细粒度更新,避免复杂样板代码。
• 中小型项目,或需要原子状态管理的场景。

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

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

相关文章

OPenCV CUDA模块目标检测----- HOG 特征提取和目标检测类cv::cuda::HOG

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::cuda::HOG 是 OpenCV 的 CUDA 模块中对 HOG 特征提取和目标检测 提供的 GPU 实现。它与 CPU 版本的 cv::HOGDescriptor 类似&#xff0c;但利…

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…

【QT】QT多语言切换

QT多语言切换 1.创建任意一个项目2. 利用lupdate&#xff08;language update&#xff09;工具生成.ts文件2.1 在工程中的.pro文件中指定.ts文件要存放的位置2.2 选择工具--》外部--》Qt语言家--》更新翻译 3. 利用 lrelease&#xff08;Language Release&#xff09;将 .ts 文…

【差分】详解二维前缀和和差分问题

文章目录 1. 二维前缀和2. 公式推导3. LeetCode 304 二维区域和检索 - 矩阵不可变3.1 304 二维区域和检索 - 矩阵不可变3.2 LeetCode 1139 最大的以 1 为边界的正方形 4. 二维差分问题5. 二维差分的原理以及差分数组计算6. 题目6.1 牛客二维差分6.2 LeetCode 2132. 用邮票贴满网…

Unity 大型手游碰撞性能优化指南

Unity 大型手游碰撞性能优化指南 版本: 2.1 作者: Unity性能优化团队 语言: 中文 前言 在Unity大型手游的开发征途中,碰撞检测如同一位隐形的舞者,它在游戏的物理世界中赋予物体交互的灵魂。然而,当这位舞者的舞步变得繁复冗余时,便会悄然消耗宝贵的计算资源,导致帧率下…

【hive】函数集锦:窗口函数、列转行、日期函数

窗口函数 https://www.cnblogs.com/Uni-Hoang/p/17411313.html <窗口函数> OVER ([PARTITION BY <分组列> [, <分组列>...]][ORDER BY <排序列> [ASC | DESC] [, <排序列> [ASC | DESC]]...][<rows or range clause>]) )窗口函数主要是…

DAY 25 异常处理

目录 DAY 25 异常处理1.异常处理机制2.debug过程中的各类报错3.try-except机制4.try-except-else-finally机制作业&#xff1a;理解今日的内容即可&#xff0c;可以检查自己过去借助ai写的代码是否带有try-except机制&#xff0c;以后可以尝试采用这类写法增加代码健壮性。 DAY…

几何绘图与三角函数计算应用

几何绘图与三角函数计算应用 设计思路 左侧为绘图控制面板&#xff0c;右侧为绘图区域支持绘制点、线、矩形、圆、多边形等基本几何图形实现三角函数计算器&#xff08;正弦、余弦、正切等&#xff09;包含角度/弧度切换和常用数学常数历史记录功能保存用户绘图 完整实现代码…

CSS 定位:原理 + 场景 + 示例全解析

一. 什么是CSS定位? CSS中的position属性用于设置元素的定位方式,它决定了元素在页面中的"定位行为" 为什么需要定位? 常规布局(如 display: block)适用于主结构 定位适用于浮动按钮,弹出层,粘性标题等场景帮助我们精确控制元素在页面中的位置 二. 定位类型全…

GESP 二级复习参考 A

本教程完整包含&#xff1a; 5000字详细知识点解析 36个Python/C双语言示例 15个GESP真题及模拟题 8张专业图表和流程图 # C编程二级标准终极教程## 一、计算机存储系统深度解析### 1.1 存储体系架构 mermaid graph TDA[CPU寄存器] --> B[L1缓存 1-2ns]B --> C[L2缓…

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…

【人工智能 | 项目开发】Python Flask实现本地AI大模型可视化界面

文末获取项目源码。 文章目录 项目背景项目结构app.py(后端服务)index.html(前端界面)项目运行项目图示项目源码项目背景 随着人工智能技术的快速发展,大语言模型在智能交互领域展现出巨大潜力。本项目基于 Qwen3-1.7B 模型,搭建一个轻量化的智能聊天助手,旨在为用户提…

【设计模式】1.简单工厂、工厂、抽象工厂模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 简单工厂模式、工厂方法模式 和 抽象工厂模式 的 Python 实现与对比&#xff0c;结合代码示例和实际应用场景说明&#xff1a; 1. 简单工厂模式&a…

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…

01.SQL语言概述

SQL 语言概述 SQL &#xff08;Structured Query Language&#xff09;结构化査询语言 1. 关系型数据库的常见组件 数据库: database 表的集合&#xff0c;物理上表现为一个目录表: table&#xff0c;行: row 列: column索引: index视图: view&#xff0c;虚拟的表存储过程:…

C++学习-入门到精通【14】标准库算法

C学习-入门到精通【14】标准库算法 目录 C学习-入门到精通【14】标准库算法一、对迭代器的最低要求迭代器无效 二、算法1.fill、fill_n、generate和generate_n2.equal、mismatch和lexicographical_compare3.remove、remove_if、remove_copy和remove_copy_if4.replace、replace_…

Vue 项目实战:三种方式实现列表→详情页表单数据保留与恢复

背景&#xff1a;在Vue项目中&#xff0c;实现列表页跳转详情页并保留表单数据&#xff0c;返回时恢复表单状态。 核心功能&#xff1a; 保存缓存&#xff1a;点击查询按钮时&#xff0c;表单数据保存恢复缓存&#xff1a;从详情页返回时&#xff0c;恢复表单数据清除缓存&…

iptables实验

实验一&#xff1a;搭建web服务&#xff0c;设置任何人能够通过80端口访问。 1.下载并启用httpd服务器 dnf -y install httpd 开启httpd服务器 systemctl start httpd 查看是否启用 下载并启用iptables&#xff0c;并关闭firewalld yum install iptable…

Razor编程RenderXXX相关方法大全

文章目录 第一章&#xff1a;RenderXXX方法概述1.1 RenderXXX方法的作用与意义1.2 基本工作原理1.3 主要方法分类 第二章&#xff1a;部分视图渲染方法2.1 Html.RenderPartial()2.2 Html.RenderAction()2.3 性能对比分析 第三章&#xff1a;视图组件渲染方法3.1 Html.RenderCom…

Go 语言 range 关键字全面解析

Go 语言 range 关键字全面解析 range 是 Go 语言中用于迭代数据结构的关键字&#xff0c;支持多种数据类型的遍历操作。它提供了一种简洁、安全且高效的方式来处理集合类型的数据。 基本语法 for index, value : range collection {// 循环体 } 1. 数组/切片迭代 fruits :…