Pinia详解

news2024/11/23 21:15:31

文章目录

  • 简介
  • 特点
  • 用法
    • 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 store
    import { useCounterStore } from './stores/counter';

    export default {
        setup() {
            // 使用 store
            const 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.coloradmin.cn/o/1874197.html

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

相关文章

数据资产管理的艺术:构建智能化、精细化的数据资产管理体系,从数据整合、分析到决策支持,为企业提供一站式的数据资产解决方案,助力企业把握数字时代的新机遇

一、引言 在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最重要的资产之一。如何高效、安全地管理这些海量数据&#xff0c;从中提取有价值的信息&#xff0c;并将其转化为决策支持&#xff0c;是每个企业都必须面对的挑战。本文将探讨数据资产管理的艺术&#xff0…

中国高分辨率土壤质地数据(1KM)

土壤中各粒级占土壤重量的百分比组合&#xff0c;叫做土壤质地。土壤质地是土壤的最基本物理性质之一&#xff0c;对土壤的各种性状&#xff0c;如土壤的通透性、保蓄性、耕性以及养分含量等都有很大的影响是评价土壤肥力和作物适宜性的重要依据。 中国土壤质地空间分布数据是根…

ChatTTS超真实自然的语音合成模型

项目介绍 ChatTTS是一款专为优化对话场景而生的语音生成模型&#xff0c;尤其匹配大型语言模型&#xff08;LLM&#xff09;的交互需求&#xff0c;以及生成对话式音频、视频旁白等应用场景&#xff0c;无缝覆盖中英文双语。 通过汲取约100,000小时的高质量中英语音数据进行深…

全球首个真人级数字人,开源了!

全球首个2D真人级AIGC**实时渲染数字人模型开源了&#xff01; 这是数字人技术界的一次大爆炸&#xff0c;我们即将迈入一个全新的交互时代&#xff0c;一个由数字人代理引领的时代。 DUIX&#xff08;Dialogue User Interface System&#xff09;&#xff0c;这个由硅基智能…

Unity的Excel转表工具

该Excel工具主要由Python语言完成&#xff0c;版本为3.x 主要功能&#xff1a; 1.转换后的数据存储结构为二进制。 2.excel文件可以选择多种数据类型&#xff1a;int、float、string、一维&#xff08;int、float、string&#xff09;、二维int、Map&#xff08;int/int、in…

杂谈咋说-事业编与公务员建议收藏!

杂谈咋说-事业编与公务员建议收藏&#xff01; 什么是铁饭碗 在中国&#xff0c;「铁饭碗」这个词常常被用来形容那些稳定、有保障的工作。 当我们谈论"铁饭碗"时&#xff0c;人们往往会将公务员和事业编制人员进行比较。 尽管这两者都是相对稳定的工作&#xff…

从单一到多元:EasyCVR流媒体视频汇聚技术推动安防监控智能升级

随着科技的飞速发展&#xff0c;视频已成为我们日常生活和工作中的重要组成部分。尤其在远程办公、在线教育、虚拟会议等领域&#xff0c;视频的应用愈发广泛。为了满足日益增长的视频需求&#xff0c;流媒体视频汇聚融合技术应运而生&#xff0c;它不仅改变了传统视频的观看和…

已解决javax.transaction.InvalidTransactionException:事务无效的正确解决方法,亲测有效!!!

已解决javax.transaction.InvalidTransactionException&#xff1a;事务无效的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 1. 确保事务的正确启动和结束 Spring中的事务管理 2. 避免嵌套事务问题…

第五节:如何使用其他注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)

大家好&#xff0c;我是网创有方&#xff0c;上节我们实践了通过Bean方式声明Bean配置。咱们这节通过Component和ComponentScan方式实现一个同样功能。这节实现的效果是从IOC中加载Bean对象&#xff0c;并且将Bean的属性打印到控制台。 第一步&#xff1a;创建pojo实体类studen…

SpringBoot——整合Shiro,实现安全认证和权限管理功能

目录 Shiro 项目总结 新建一个SpringBoot项目 pom.xml application.properties&#xff08;配置文件&#xff09; User&#xff08;实体类&#xff09; UserMapper&#xff08;数据访问层接口&#xff09; UserMapper.xml&#xff08;数据库映射文件&#xff09; User…

量化投资 日周月报 2024-06-28

文章 深度学习在量化交易中的应用:在BigQuant量化交易平台的文章中,探讨了深度学习在量化交易中,特别是在因子挖掘方面的应用。文章提到,随着传统线性模型的潜力逐渐枯竭,非线性模型逐渐成为量化交易的主要探索方向。深度学习因其对非线性关系的拟合能力,在量化交易中展现…

【保姆级详细介绍JavaScript初识及基本语法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

WPS表格下拉数据不自动增长的办法

使用WPS表格的时候&#xff0c;发现下拉数据总是会自动增长。但是当我们不需要它自动增长的话&#xff0c;怎么办呢&#xff1f; 只需要按住ctrl然后再下拉&#xff0c;这样数据就不会自动增长啦

建投数据人力资源管理系统APP完成迭代升级

近日&#xff0c;建投数据人力资源管理系统APP完成迭代升级。 此次升级思路&#xff0c;遵循提升移动应用的功能和用户体验&#xff1b;直观的界面、快速的响应速度和安全的数据存储&#xff1b;个性化的功能&#xff0c;以满足不同员工的需求和使用偏好。 人力资源管理系统A…

Vite脚手架+Vant组件库初始化前端项目

脚手架概念&#xff1a; 在前端开发中&#xff0c;脚手架&#xff08;Scaffold&#xff09;是指一个用于快速搭建项目基础结构的工具或模板。脚手架包含了项目所需的基本文件结构、配置文件、依赖管理等内容&#xff0c;使开发者能够更快速地开始项目开发&#xff0c;而不必从…

深度学习 --- stanford cs231学习笔记七(训练神经网络之梯度下降优化器)

5&#xff0c;梯度下降优化器 5&#xff0c;1 梯度下降在深度学习中的作用 在深度学习中&#xff0c;权重W的值是否合理是由损失函数L来判断的。L越小&#xff0c;表示W的设置越happy。L越大&#xff0c;表示W的值越unhappy。 为了让L越来越小&#xff0c;常用的方法是梯度下降…

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a;…

慌慌张张,匆匆忙忙,又是学习的一天

今天学进程 进程的状态 &#xff08;本科的考点我记得哈哈&#xff09; 什么是线程 线程的状态 线程和进程的区别 一个共享 一个私有 独立 多线程的优缺点 线程的分类 内核支持线程 用户级线程 组合方式线程 协程coroutine 进程 分配资源的最小单位 线程 是cpu调度的最小…

【RNN练习】LSTM-火灾温度预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前期准备工作 import torch.nn.functional as F import numpy as np import pandas as pd import torch from torch import nn1. 导入数据 data pd.read_cs…

使用谷歌的colab运行代码初试

前言 最近学习李沐的动手深度学习&#xff0c;使用conda创建并配置环境应用mxnet框架&#xff0c;配置环境、兼容等问题给我折腾坏了。干脆转到谷歌的交互式环境colab进行操作。 不过使用colab的前提是会科学上网。否则连谷歌都用不了。这个科学上网就需要自己解决了。 colab可…