Vue的状态管理——Vuex34Pinia

news2024/9/28 1:25:06

Vue3中Vuex的使用_vue3 vuex-CSDN博客 

VueX详解_组合式vuex-CSDN博客

15分钟学会Pinia

Vuex 3和4详解

Vuex 3

Vuex 3是Vue.js 2.x版本的状态管理库,它提供了一种集中式存储和管理组件状态的方式。以下是Vuex 3的一些关键特性:

  1. 状态集中管理:Vuex 3的状态是集中存储的,所有的状态都放在一个树状结构中,并且只能通过mutations来修改状态。
  2. 响应式状态:当状态发生改变时,相关的组件会自动更新。
  3. 模块化:虽然Vuex 3本身不支持模块热替换,但可以通过将状态划分为不同的模块来提高代码的可维护性和可扩展性。
  4. 插件系统:Vuex 3的插件接口相对简单,通过storesubscribe方法来监听全部的状态变化。

Vuex 4

Vuex 4是Vue.js 3.x版本的状态管理库,它在Vuex 3的基础上进行了多项改进和优化,使其更加适用于大型应用和复杂场景。以下是Vuex 4的一些新特性:

  1. 状态分割和模块热替换:Vuex 4引入了状态分割和模块热替换的概念,状态可以分割成多个模块,每个模块拥有自己的状态、操作和订阅。这种分割的方式有助于组织和维护大型应用中的状态,并且可以通过热替换来动态添加或移除模块。
  2. 响应式状态管理改进:Vuex 4通过引入markRawshallowRef的概念,对响应性进行进一步改进。使用markRaw可以标记一个对象为非响应式的,使用shallowRef可以创建一个浅响应式对象,如果浅响应式对象的属性变化,不会触发组件的更新。
  3. 插件接口改进:Vuex 4通过引入subscribeActionsubscribeMutationsubscribeGetter方法来对插件接口进行改进,使得开发者可以更加细粒度地对应用程序的状态进行监听和处理。
  4. 性能优化:Vuex 4减少了状态变化时的不必要计算和更新,提高了性能。
  5. TypeScript支持:Vuex 4支持TypeScript,提供了更好的类型检查和开发工具支持。

Pinia详解

Pinia是Vue.js 3.x的状态管理库,它可以看作是Vuex的升级版,旨在提供一种更简单、更直观的方式来管理Vue.js应用程序的状态。以下是Pinia的一些关键特性:

  1. 状态管理:Pinia提供了一个集中的位置来存储和管理应用程序的状态。
  2. 模块化状态:Pinia支持将状态划分为不同的模块,以提高代码的可维护性和可扩展性。每个模块可以包含自己的状态、getters、mutations和actions。
  3. 状态订阅:Pinia允许开发者订阅状态的变化,并在状态发生变化时触发相应的回调函数。
  4. 缓存和持久化:Pinia支持缓存状态数据以提高性能,并支持将状态数据持久化到本地存储或后端数据库中。
  5. 与Vue.js生态系统无缝集成:Pinia与Vue.js的其他工具和库配合良好,可以轻松地与Vue Router等一起使用。
  6. 轻量级:Pinia非常轻巧,只有大约1kb的大小。
  7. 类型安全:通过类型推断,Pinia可以提供自动完成的功能。
  8. Vue Devtools支持:Pinia支持Vue Devtools,可以方便地进行调试。

Vuex 3、Vuex 4与Pinia的对比表格

特性/库Vuex 3Vuex 4Pinia
Vue版本兼容性Vue 2.xVue 3.xVue 3.x
状态管理方式集中存储,通过mutations修改集中存储,支持状态分割和模块热替换集中存储,模块化设计
响应式状态管理响应式,自动更新组件引入markRawshallowRef进行改进响应式,自动更新组件
插件接口简单,通过subscribe监听全部状态变化改进,引入subscribeActionsubscribeMutationsubscribeGetter灵活,支持多种扩展方式
TypeScript支持无原生支持,但可配合工具使用原生支持,提供更好的类型检查和开发工具支持原生支持,提供类型安全
模块化支持,但无模块热替换支持状态分割和模块热替换支持模块化状态管理
缓存和持久化需要额外插件或手动实现类似Vuex 3,可能需要额外插件或手动实现内置支持缓存和持久化
性能优化依赖于Vue 2.x的性能优化进一步优化了状态变化的计算和更新轻量化设计,性能良好
生态系统支持成熟,广泛应用于Vue 2.x项目逐渐完善,适用于Vue 3.x项目适用于Vue 3.x项目,新兴但受欢迎
学习曲线相对较陡峭,API较为复杂类似于Vuex 3,但引入了新特性和改进较简单,更直观,易于上手

Vuex 3 示例

安装 Vuex 3(注意:Vue 3 项目通常不使用 Vuex 3,但为了完整性,这里仍提供示例)

对于 Vue 2 项目,你可以安装 Vuex 3:

npm install vuex@3 --save

 

配置 Vuex Store(Vue 2 示例)

在 Vue 2 项目中,你可能会在 src/store/index.js 中设置 Vuex store:

import Vue from 'vue'; 
import Vuex from 'vuex'; 


Vue.use(Vuex); 


export default new Vuex.Store({ 
state: { 
count: 0 
}, 
mutations: { 
increment(state) { 
state.count++; 
} 
}, 
actions: { 
incrementIfOddOnRootSum({ state, commit, rootState }) { 
if ((state.count + rootState.otherCount) % 2 === 1) { 
commit('increment'); 
} 
} 
}, 
modules: { 
// 模块可以在这里定义 
} 
});

在 Vue 组件中使用 Vuex 3:

<template> 
<div>{{ count }}</div> 
<button @click="increment">Increment</button> 
</template> 


<script> 
export default { 
computed: { 
count() { 
return this.$store.state.count; 
} 
}, 
methods: { 
increment() { 
this.$store.commit('increment'); 
} 
} 
} 
</script>

注意:在 Vue 3 项目中,你通常会使用 Vuex 4 或 Pinia 而不是 Vuex 3。

Vuex 4 示例

安装 Vuex 4

对于 Vue 3 项目,安装 Vuex 4:

npm install vuex@next --save # 或使用 vuex@4
import { createStore } from 'vuex'; 


export default createStore({ 
state() { 
return { 
count: 0 
}; 
}, 
mutations: { 
increment(state) { 
state.count++; 
} 
}, 
actions: { 
incrementIfOdd({ commit, state }) { 
if (state.count % 2 === 1) { 
commit('increment'); 
} 
} 
}, 
modules: { 
// 模块可以在这里定义 
} 
});

配置 Vuex Store(Vue 3 示例)

在 Vue 3 项目中,你可能会在 src/store/index.js 或 src/store/index.ts 中设置 Vuex store:

在 Vue 组件中使用 Vuex 4(与 Vuex 3 类似,但通常是在 Vue 3 上下文中):

<template> 
<div>{{ count }}</div> 
<button @click="increment">Increment</button> 
</template> 


<script> 
import { useStore } from 'vuex'; 


export default { 
setup() { 
const store = useStore(); 


const count = computed(() => store.state.count); 


const increment = () => { 
store.commit('increment'); 
}; 


return { count, increment }; 
} 
} 
</script>

注意这里使用了 Vue 3 的 Composition API。

Pinia 示例

安装 Pinia

npm install pinia --save

配置 Pinia Store

在 Vue 3 项目中,你可以在 src/stores/index.js 或 src/stores/index.ts 中设置 Pinia store:

import { defineStore } from 'pinia'; 


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

在 Vue 组件中使用 Pinia:

vue复制代码

<template> 
<div>{{ count }}</div> 
<button @click="increment">Increment</button> 
</template> 


<script> 
import { useCounterStore } from '@/stores/index'; 


export default { 
setup() { 
const store = useCounterStore(); 


const count = computed(() => store.count); 


const increment = () => { 
store.increment(); 
}; 


return { count, increment }; 
} 
} 
</script>

同样,这里也使用了 Vue 3 的 Composition API。注意,Pinia 的用法与 Vuex 4 在 Composition API 上下文中非常相似,但 Pinia 的 API 和概念可能更加直观和易于理解。

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

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

相关文章

Vulnhub靶场 | DC系列 - DC-3

文章目录 DC-3环境搭建渗透测试 DC-3 环境搭建 靶机镜像下载地址&#xff1a;https://vulnhub.com/entry/dc-32,312/需要将靶机和 kali 攻击机放在同一个局域网里&#xff1b;本实验kali 的 IP 地址&#xff1a;192.168.10.146。 渗透测试 使用 nmap 扫描 192.168.10.0/24 …

鸿蒙(API 12 Beta5版)【通过文本生成码图】

基本概念 码图生成能力支持将字符串转换为自定义格式的码图。 场景介绍 码图生成能力支持将字符串转换为自定义格式的码图&#xff0c;包含条形码、二维码生成。 可以将字符串转成联系人码图&#xff0c;手机克隆码图&#xff0c;例如将"HUAWEI"字符串生成码图使…

如何借助前端表格控件实现软硬一体化数据管理平台

行业背景 在当今数字化时代&#xff0c;随着以数据为关键要素的数字中国建设蓬勃发展&#xff0c;数字化转型的步伐也日益加快。数据的重要性不仅体现在其所包含的信息和见解上&#xff0c;更在于其能够推动社会各领域的创新与进步&#xff0c;为构建数字化未来提供了强劲动力…

优化数据以提升大模型RAG性能思路:Meta Knowledge for RAG的一个实现思路

传统的RAG系统通过检索然后阅读框架来增强LLMs&#xff0c;但存在一些挑战&#xff0c;如知识库文档的噪声、缺乏人工标注信息、长文档的编码问题以及用户查询的模糊性。 因此可以采用数据为中心的增强方法&#xff0c;我们可以看看最近的一个工作。 一、Meta Knowledge for …

Windows中jupyter开启远程连接(局域网)

我是用实验室的电脑&#xff08;做服务器&#xff0c;window&#xff09;给我的电脑&#xff08;做客户机&#xff0c;window&#xff09;开远程连接&#xff0c;step1-4都是在服务器上操作&#xff0c;step5是在客户机上 step1&#xff1a;生成密钥 服务器cmd输入 jupyter n…

计算机网络803-(3)数据链路层

目录 一.数据链路两种类型 二.使用点对点信道的数据链路层 1. 数据链路和帧 2.数据链路层传送的是帧 三.三个基本问题 1.封装成帧 2.透明传输 ①字节填充法 ②其他方法&#xff1a;字符计数法&#xff0c;比特填充法&#xff0c;违规编码 3. 差错检测 &#xff08;1…

OpenAI API Error: Resource not found - Text Summarization in NodeJS

题意&#xff1a;OpenAI API 错误&#xff1a;资源未找到 - NodeJS 中的文本摘要 问题背景&#xff1a; Here is the text summarization function. I have valid azure openai API, endpoint through a valid subscription and I have mentioned them in the .env file corre…

JavaWeb JavaScript ⑥ 事件

你摸黑偷偷赶得路&#xff0c;都会变成意外来袭时你少受的苦 —— 24.8.29 一、什么是事件 HTML 事件可以是浏览器行为&#xff0c;也可以是用户行为。 当一些行为发生时,可以自动触发对应的JS函数的运行,我们称之为事件发生&#xff0c;JS的事 件驱动指的就是行为触发代码运行…

Vatee万腾平台:打造企业智能化转型的坚实后盾

在当今这个日新月异的数字化时代&#xff0c;企业智能化转型已成为不可逆转的趋势。面对激烈的市场竞争和快速变化的市场需求&#xff0c;如何高效、稳定地完成这一转型&#xff0c;成为众多企业亟需解决的问题。而Vatee万腾平台&#xff0c;正是这样一位引领企业智能化转型的坚…

github源码指引:C++嵌入式WEB服务器

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 相关专题&#xff1a; C嵌入式…

C# opencv识别二维码

新建桌面程序 安装opencvsharp 拖拽设计页面 选择图片识别代码 using OpenCvSharp; using System.Text;namespace QRcodeIdentity {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 选择图片/// </summary>/// <pa…

STM32——Flash闪存

以上部分&#xff0c;主存储器&#xff1a;程序存储器&#xff1b; 启动程序代码&#xff1a;系统存储器&#xff1b; 用户选择字节&#xff1a;选项字节 以下是闪存的管理员&#xff0c;用于擦除和读写的地址 C8T6一共64K&#xff0c;主存储器为64页 以下是整体框图&#x…

【数据库|第10期】SQL Server、Access和Sqlite 的表别名详解

日期&#xff1a;2024年8月28日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

视频云流化与PaaS平台解决方案详细介绍

一、什么是视频云流化&#xff1f; 视频云流化&#xff08;Video Cloud Transcoding&#xff09;是一种将视频文件转换为适用于流媒体传输的不同格式和码率的过程。它是云计算和流媒体技术的结合&#xff0c;通过利用云平台的计算和存储资源&#xff0c;将视频内容转码为适应不…

什么是时钟偏差—Clock Skew?理解时钟分配网络中的时钟偏差

了解时钟偏差是什么,以及它如何通过理解同步电路、时钟传递和时钟分配网络对现代系统产生影响。 现代数字电子设计的最大挑战之一是能够满足时序约束。在数字电路中,保持可预测且组织良好的操作逻辑流的一种方法是进行精确控制和明确定义时序。 时钟偏差是这些电路设计中需…

Scratch教学案例-《三顾茅庐》:让编程学习如同故事般引人入胜

三顾茅庐-小虎鲸Scratch资源站 在编程的世界里&#xff0c;我们常常寻找那种既能激发创意&#xff0c;又能提升技能的学习方式。今天&#xff0c;小虎鲸Scratch资源站为您带来了一款独特的教学作品——《三顾茅庐》。这是一部将经典故事与编程教学巧妙结合的Scratch项目&#x…

.NET 8.0 前后分离快速开发框架

目录 前言 项目介绍 功能特点 适用范围 内置功能 项目技术 1、前端技术 2、传送门 3、后端技术 项目结构 项目效果 项目地址 最后 前言 大家好&#xff0c;推荐一个.NET 8.0 为核心&#xff0c;结合前端 Vue 框架&#xff0c;实现了前后端完全分离的设计理念。它不…

【Python机器学习】NLP词频背后的含义——隐性狄利克雷分布(LDiA)

目录 LDiA思想 基于LDiA主题模型的短消息语义分析 LDiALDA垃圾消息过滤器 更公平的对比&#xff1a;32个LDiA主题 对于大多数主题建模、语义搜索或基于内容的推荐引擎来说&#xff0c;LSA应该是首选方法。它的数学机理直观、有效&#xff0c;它会产生一个线性变换&#xff…

进程间通信--IPC机制

今天主要讲述独立的进程之间的通信&#xff0c;我们知道&#xff0c;进程是一个完整代码的执行过程&#xff0c;那么我们想实现在进程运行的过程之中传递信息或者是发送数据&#xff0c;就是通过IPC机制来完成。 一、什么是IPC机制 IPC&#xff1a;inter process communication…

文件泄密?不存在的!一文读懂文件防泄密最新五个小妙招

在当今信息化时代&#xff0c;企业数据的安全性显得尤为重要。文件泄密事件频发&#xff0c;不仅会给企业带来巨大的经济损失&#xff0c;还可能损害企业的声誉。因此&#xff0c;如何有效防止文件泄密成为了企业管理中的重中之重。本文将为大家介绍最新的五个防泄密妙招&#…