Pinia详解

文章目录

  • 简介
  • 特点
  • 用法
    • 1. 安装Pinia
    • 2. 注册Pinia Store
    • 3. 创建Pinia Store
    • 4. 使用Pinia Store
  • 区别

在这里插入图片描述

Vuex详解

Pinia是一个基于Vue 3的状态管理库,专为Vue 3设计。它提供了一种简单、直观且可扩展的方式来组织和访问应用程序的状态。Pinia的设计灵感来源于Vuex,但相比Vuex,Pinia更加轻量级、简单易用和灵活。Pinia利用Vue 3的新特性,如Composition API,使得开发者能够更容易地上手和使用。

简介

Pinia官网

Pinia是一个基于Vue 3的状态管理库,专为Vue 3设计。它提供了一种简单、直观且可扩展的方式来组织和访问应用程序的状态。Pinia的设计灵感来源于Vuex,但相比Vuex,Pinia更加轻量级、简单易用和灵活。Pinia利用Vue 3的新特性,如Composition API,使得开发者能够更容易地上手和使用。

特点

  • 轻量级:Pinia不需要使用Vuex中的一些复杂概念,如模块和getter,因此更加轻量级。

  • 简单易用:Pinia的API设计更加简单直观,特别是与Vue 3的Composition API紧密集成,使得开发者能够更快速地理解和使用。

  • 模块化状态管理:Pinia支持将状态划分为不同的模块,提高了代码的可维护性和可扩展性。

  • 状态订阅:Pinia允许开发者订阅状态的变化,并在状态发生变化时触发相应的回调函数。

  • 类型安全:Pinia支持TypeScript,并提供了类型安全的API和开发体验,使得在开发过程中能够更好地捕获错误和进行静态类型检查。

  • 支持异步操作:Pinia支持在actions中执行异步操作,如发送网络请求、处理副作用等。

用法

1. 安装Pinia

使用npm或yarn等包管理器安装Pinia库。

npm install pinia

yarn add pinia

2. 注册Pinia Store

在应用程序的入口文件中注册Pinia Store,以便它能够在整个应用程序中使用。

// main.js  
import { createApp } from 'vue'  
import { createPinia } from 'pinia'  
import App from './App.vue'  const app = createApp(App)  // 创建一个 Pinia 实例  
const pinia = createPinia()  // 使用 Pinia  
app.use(pinia)  app.mount('#app')

3. 创建Pinia Store

使用 defineStore 函数来创建一个Pinia Store,定义状态、getters 和 actions 等。

接下来,定义一个 Pinia store 来管理一个简单的计数器状态:

// stores/counter.js  
import { defineStore } from 'pinia'// 你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
// 第一个参数是你的应用中 Store 的唯一 ID。
export const useCounterStore = defineStore('counter', {// store 的数据 (data)state: () => ({count: 0}),// getters 是 store 的计算属性 (computed)getters: {// 可以通过 this 访问 state  doubleCount: (state) => state.count * 2},// actions 则是方法 (methods)actions: {increment () {this.count++},decrement () {if (this.count > 0) {this.count--}},// 异步操作示例  async fetchCountFromApi () {// 假设我们从一个 API 获取新的计数  const response = await fetch('https://api.example.com/count')const data = await response.json()this.count = data.count}}})

4. 使用Pinia Store

在Vue组件中通过 useStore 函数来访问和使用 Pinia Store 中的状态。

<!-- App.vue -->
<template><div><p>Count: {{ counterStore.count }}</p><p>Double Count: {{ counterStore.doubleCount }}</p><button @click="counterStore.increment">Increment</button><button @click="counterStore.decrement" :disabled="counterStore.count <= 0">Decrement</button><!-- 假设我们有一个按钮来触发 API 调用 --><button @click="counterStore.fetchCountFromApi">Fetch Count from API</button></div>
</template><script>// 导入并使用 Pinia storeimport { useCounterStore } from './stores/counter';export default {setup() {// 使用 storeconst counterStore = useCounterStore();// 返回需要在模板中使用的响应式数据和方法return {counterStore};}};
</script>

上例中,导入这个 store,并在模板中使用了它的状态和方法。还添加了一个按钮来触发一个模拟的 API 调用,以更新计数器的值。

区别

特性VuexPinia
设计原则Flux-like更接近 Vue 3 的 Composition API
版本兼容性Vue 2, Vue 3主要针对 Vue 3
状态管理使用全局单一的 Store 来管理应用的状态使用独立的 store(与组件类似)来管理状态
状态结构模块化的,通过命名空间区分每个 store 都是独立的,易于测试和复用
Mutations强制使用,用于同步更新状态不需要 mutations,直接通过 actions 或 state 的直接赋值来更新状态
Actions用于异步操作或包含任意副作用的操作类似于 Vuex 的 actions,但更简洁,可以直接在 actions 中修改状态
Type Safety需要额外的工具或插件来支持天然的 TypeScript 支持,提供更好的类型安全
插件系统支持插件扩展支持通过 middleware(中间件)或 plugins(插件)来扩展功能
热模块替换 (HMR)支持,但需要额外配置支持,集成在 Pinia 内部
开发体验需要额外的学习成本,尤其是 mutations 的使用接近 Vue 3 的 Composition API,学习成本低
体积相对较大,包含额外的功能和抽象较小,只包含核心功能
社区支持成熟的社区和大量的教程/文档相对较新的项目,但正在迅速获得支持
适用场景大型、复杂的应用中小型到大型应用,尤其是需要更灵活状态管理的场景

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

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

相关文章

199.罗马数字转整数(力扣)

代码解决 class Solution { public:// 定义一个哈希表来存储罗马数字符号及其对应的整数值unordered_map<char, int> res {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};// 将罗马数字字符串转换为整数的函数int romanToInt(string s) {int num 0; …

keepalive+nginx高可用架构

目录 一.keepalive简要介绍 1.keepalive相关文件 2.keepalive配置组成 3.keepalive全局配置 4.配置虚拟路由器 5.抢占模式和非抢占模式 抢占模式&#xff08;Preemptive Mode&#xff09; 使用方法&#xff1a; 非抢占模式&#xff08;Non-preemptive Mode&#xff09;…

vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)

本篇介绍一下使用vue3-openlayers轨迹回放&#xff08;历史轨迹&#xff09;&#xff08;ol-animation-path实现&#xff09; 1 需求 轨迹回放&#xff08;历史轨迹&#xff09;实时轨迹 2 分析 轨迹回放&#xff08;历史轨迹&#xff09;&#xff0c;一般是一次性拿到所有…

LabVIEW在核磁共振实验室的应用

​核磁共振&#xff08;NMR&#xff09;实验室在进行复杂的核磁共振实验时&#xff0c;需要一个高效、灵活且易于操作的实验控制和数据采集系统。传统的NMR实验系统往往使用专门的硬件和软件&#xff0c;存在系统封闭、扩展性差、维护成本高等问题。为了解决这些问题&#xff0…

fastadmin框架修改前端时间戳格式的时区

一、上传文件 将 moment-timezone-with-data.js 和 moment-timezone-with-data.min.js 文件上传到项目的 \public\assets\libs\moment\ 文件夹中。 二、配置中引入文件 在 \public\assets\js\require-backend.js 文件中增加所引入文件的配置: moment-timezone-with-data: …

计算机方向国际学术会议推荐

*华中师范大学伍伦贡联合研究院与南京大学联合主办 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 大会官网&#xff1a;www.icaiotc.net 时间地点&#xff1a;2024年9月13-15日&#xff0c;中国武汉 收录检索&#xff1a;EI Compendex&a…

分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测

分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测 目录 分类预测 | Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GA-XGBoost遗传算法优化XGBoost的多特征分类预测&#xff0c;…

发动机燃烧仿真|CMCL填补CFD与0维/1维均质反应模型方法间的空白

发动机的研制涉及空气动力、燃烧传热、自动控制等多方面的问题。相比基于物理样机试验的传统涉及方法&#xff0c;数值模拟仿真设计方法大大地节约了研发成本、缩短了研发周期。 对于发动机一维概念设计&#xff0c;CMCL燃烧仿真解决方案可以帮助用户快速准确实现点火、熄火、…

什么是AI绘画?全网最细stable diffusion工作原理讲解!

前言 &#xff08;这篇文章是给那些打算接触AI绘画和还不太了解的人写的&#xff09;什么是AI绘画&#xff1f;什么配置才能AI绘画&#xff1f;要怎样部署文件、输入咒语&#xff1f;你是否有着这样的疑问&#xff0c;在这个系列我会写一下我近一个多月的学习成果&#xff0c;…

hypernetwork在SD中是怎么工作的

大家在stable diffusion webUI中可能看到过hypernetwork这个词&#xff0c;那么hypernetwork到底是做什么用的呢&#xff1f; 简单点说&#xff0c;hypernetwork模型是用于修改样式的小型神经网络。 什么是 Stable Diffusion 中的hypernetwork&#xff1f; Hypernetwork 是由…

JavaWeb系列十二: 服务器端渲染技术(JSP) 上

跟着韩老师学java 1. JSP基本介绍1.1 JSP快速入门1.2 JSP(Java Server Pages)运行原理1.3 page指令介绍1.4 JSP脚本1.4.1 声明脚本1.4.2 表达式脚本1.4.3 java代码脚本 1.5 jsp注释1.6 jsp内置对象1.7 JSP四大域对象1.7.1 域对象实例1.7.2 注意事项 1.8 JSP请求转发标签1.9 作业…

MYSQL 将某个字段赋值当前时间

如 我们需要将use_time 赋值为当前时间&#xff1a; 准备三条数据 &#xff1a; 执行sql &#xff0c;2种当前时间赋值函数&#xff0c;1种关键字赋值 &#xff1a; update test_info SET use_timeNOW() WHERE id 1; update test_info SET use_timeCURRENT_TIMESTAMP() …

基于飞腾腾云S2500的ATS部署及调优指南(反向代理篇)

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

场外期权一级交易商都有哪些?和二级交易商有什么区别?

今天带你了解场外期权一级交易商都有哪些&#xff1f;和二级交易商有什么区别&#xff1f;目前&#xff0c;个人投资者无法直接进行场外个股期权投资&#xff0c;而是需要通过专业机构进行询价交易下单。 场外期权业务一级交易商分别为&#xff0c;广发证券、国泰君安、华泰证…

Java学习笔记(一)Java内容介绍、程序举例、DOS命令、Java跨平台特性的本质、课后练习

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java内容介绍、程序举例、DOS命令、Java跨平台特性的本质还有几道课后练习详细介绍以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 …

中小学校共用电脑通过安当SLA产品配置实现开机控制

中小学校公用电脑实现电脑开机控制的必要性主要体现在以下几个方面&#xff1a; 1. 增强安全性&#xff1a; 公用电脑由于使用频繁&#xff0c;容易被未经授权的用户访问&#xff0c;可能存在数据泄露或恶意软件植入的风险。通过实现电脑开机控制&#xff0c;学校可以确保只有…

【jdk】jdk11 jdk17 jdk21的新特性

前言&#xff1a;按照博主的个人理解&#xff0c;一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性&#xff0c;之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢&#xff1f; 比如jdk11新特性&#xff0c;一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…

加速度传感器采集时无效数据的产生及消除

1.现象 这是振动传感器的原始采样信号&#xff0c;它有一个明显的上升沿&#xff0c;这个上升沿&#xff0c;看时间轴标尺&#xff0c;大概持续了至少50ms&#xff0c;它是从哪里来的呢&#xff1f; 加速度传感器一般是由恒流源驱动的。而恒流源的原始电源输入是个经由电源模…

RabbitMQ使用交换机进行消息转发

使用交换机进行转发到队列 第一步&#xff1a;创建队列 第二步&#xff1a;创建交换机 第三步&#xff1a;交换机绑定队列 第四步&#xff1a;修改消息生产者发送业务 第五步&#xff1a;修改消息接收者业务代码 RabbitListener(queues "fanout.queue1")public vo…

linux服务器没外网源码安装glibc-2-28

linux服务器没外网源码安装glibc-2-28 所需源码包&#xff0c;其中gcc文件夹不需要&#xff0c;其它tar包都需要 tar.gz的解压方式 #tar -zxvf 包名 tar.xz的解压方式 #tar -xf 包名 全部解压完成后 安装顺序请按照下方顺序操作&#xff08;wget后面是下载地址&#xff…