Pinia的简要概述

news2025/7/18 11:00:53

        Pinia是专为 Vue 应用程序开发的状态管理库,Pinia 支持 Vue2和 Vue3。在 Vue3项目中,既可以使用传统的 Vuex实现状态管理,又可以使用 Pinia 实现状态管理。本章将对 Pinia的基本使用方法进行讲解。


一.Pinia 概述

        Pinia 是新一代的轻量级状态管理库,它允许跨组件或页面共享状态,解决了多组件间的数据通信,使数据操作更加简洁。

        Pinia与 Vuex相比,主要优点如下。

  • Pinia 支持 Vue2和 Vue 3,支持选项式 API和组合式 API。
  • Pinia 简化了状态管理库的使用方法,抛弃了mutations,只有 state、getters和actions,让代码编写更容易也更直观。
  • Pinia 不需要嵌套模板,符合 Vue3中的组合式 API,让代码更加扁平化。
  • Pinia 提供了完整的 TypeScript 支持。
  • Pinia 分模块不需要借助 modules,使代码更加简洁,可以实现良好的代码自动分隔。
  • Pinia 支持 Devtools 调试工具,便于进行调试。
  • Pinia 体积更小,性能更好。
  •  Pinia 支持在某个组件中直接修改 Pinia 的 state 中的数据。
  • Pinia 支持服务器端渲染。

二.安装 Pinia

        使用包管理工具安装 Pinia,具体命令如下。

#使用yarn 包管理器安装
yarn add pinia --save
#使用 npm 包管理器安装
npm install pinia --save

        上述命令展示了使用两种包管理工具安装 Pimnia 的方法,在使用时任选其一即可。

        下面演示如何在项目中安装Pinia,基本步骤如下。

① 打开命令提示符,切换到 D:\vue\chapter07目录,使用 yarn 创建一个名称为 my-pinia的项目,具体命令如下。

yarn create vite my-pinia --template vue

        在上述命令中,my-pinia 表示项目名称。

        在命令提示符中,切换到my-pinia目录,为项目安装所有依赖,具体命令如下。

cd my-pinia
yarn

② 在 my-pinia 目录下,使用 yam 安装 Pinia,具体命令如下。

yarn add pinia@2.0.27--save

③ 使用 VS Code 编辑器打开 my-pinia 目录。
④ 执行命令启动服务,具体命令如下。

yarn dev

        项目启动后,会默认开启一个本地服务,地址为htp://127.0.0.1:5173/。

        至此,my-pinia项目创建完成,并在项目中成功安装了Pinia。


三.使用 Pinia

        在项目中使用 Pinia时,通常先在项目中创建一个 store 模块,然后创建并挂载 Pimnia 实例。其中,store 模块是用于管理状态数据的仓库。

        创建 srclstore\index.js 文件,编写 store 模块的代码,具体代码如下。

import { defineStore } from 'pinia'
 export const useStore = defineStore('storeld',{
    state:()=>{},
    getters:{},
    actions:{}
})

        在上述代码中,第1行代码用于导人 defineStore( )函数;第2行代码使用 defineStore( )函数定义 store 对象,并通过 export 关键字导出 useStore()函数。通过调用 userStore( )函数可以获取 store 对象。

        defneStore()函数接收2个参数,第1个参数 storeld是状态管理容器的名称,也是 store的唯一id,必须传人;第2个参数是一个配置对象,包含 state、getters 和 actions 属性,具体解释如下。

① state:用于管理数据,它被定义为一个返回初始状态的函数,使得 Pinia 可以同时支持服务器端和客户端。

② geuers:用于获取数据之前进行再次编译,从而得到新的数据,类似于 Vue 中的computed 属性。
③ actions:用于定义事件处理方法,可以进行同步或异步操作。

在sre\mainjs 文件中创建并挂载 Pimia 实例,具体代码如下。

import { createApp } from 'vue'
 import'./style.css'
import ( createpinia } from 'pinia'
import App from './App.vue'
const app = createApp (app)
const pinia = createPinia()// 创建 Pinia 实例
app.use (pinia)//导入Pinia 实例
app.mount('#app' )

        在上述代码中,第3行代码用于导人 createPinia()函数;第6行代码使用 createPinia()数创建一个 Pinia 实例;第7行代码使用 app.use()方法挂载 Pinia 实例。


四.Pinia 计数器案例

        具体步骤如下。

① 清空 srepp.vue 文件中的内容,重新编写如下代码。

<template>
<p>
每次增加1:<button @click="increment">+</button>
数字:0
</p>
<P>
每次减少1:<button @click="reduction">-</button>
数字:100
</p>
 </template>
<script setup>
 const increment=()=>{}
 const reduction=()=>{}
</script>
 <style>
 button {
 background-color: aquamarine;
}
</style>

② 编写 src\store\index.js 文件,具体代码如下。

import { defineStore }from 'pinia'
export const useStore = defineStore('storeId',{
state:()=>{
return {
add:0,
reduce: 100
}
},
getters:{},
actions:{
increase(){
this.add++
},
decrease() {
this.reduce--
}
}
 })

        在上述代码中,第3~8行代码在 state 中定义了初始数据;第 10~17行代码在 actions中定义了 inerease()方法和 decrease()方法。

③ 修改 src\App.vue 文件,调用 actions 中定义的increase( )方法和 decrease( )方法,具体代码如下。

<script setup>
 import { useStore }from './store' 
import { storeToRefs ) from 'pinia'
const store =useStore()
 const { add,reduce)= storeToRefs(store)
 const increment=()=>{
store.increase()
}
 const reduction=()=>{
store.decrease()
 }
</script>

        在上述代码中,第2行代码导入了 useStore()函数;第3行代码导人了 storeToRefs()函数;第4行代码通过 useStore()函数获取 store 对象;第5行代码用于调用 storeToRefs()函数将 store 对象转换为响应式数据,并解构出了 add 和 reduce 数据;第7行代码调用了 stor对象的 increase()方法;第10行代码调用了 store 对象的 decrease( )方法。

④在<template>模板中输出 state 中的数据,显示在页面中,具体代码如下。

<p>
    每次增加1:<button @click="increment">+</button>
    数字:{{ add }}
</p>
 <p>
    每次减少1:<button @click="reduction">-</button>
    数字:{{reduce})
 </p>

        在上述代码中,第3行代码通过{{ add))输出 state 中定义的 add 变量的值;第7行代码通过{{reduce }}输出 state 中定义的 reduce 变量的值。

        保存上述代码,在浏览器中访问 htp://127.0.0.1:5173/,页面初始效果与图 1 所示的效果相同。单击一次“+”按钮后,运行效果与图 2所示的效果相同。刷新并单击一次“-按钮后,运行效果与图 3所示的效果相同。

                                                                图1

 

                                                                           图2

                                                                         图3


感谢大家的阅读,如有不对的地方,可以私信我,感谢大家!

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

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

相关文章

Echarts图表实现X轴自动滚动加载数据

1.用到了Echarts图表自带的dataZoom组件 2.使用定时器定时刷新数据 效果图 关键代码 dataZoom: [{xAxisData: 0,//这里是从X轴的0刻度开始show: false,//是否显示滑动条type: slider, // 这个 dataZoom 组件是 slider 型 dataZoom 组件startValue: 0, // 从头开始。endValue:…

小程序 UI 风格,构建美妙视觉

小程序 UI 风格&#xff0c;构建美妙视觉

数据结构——队列(Queue)详解

1.队列&#xff08;Queue&#xff09; 1.1概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out)的性质 入队列&#xff1a;进行插入操作的一端称为队尾(Tail/Rear) 出…

10054 远程主机强迫关闭了一个现有的连接

在连接数据库SQLserver&#xff0c;时可能会出现如下的故障&#xff0c;特别是当操作系统是Win11时&#xff0c;在连接比较旧的版本数据库时会出现这样的问题&#xff1a;10054 远程主机强迫关闭了一个现有的连接。报错如下图所示&#xff1a; 根据微软的官方网站&#xff0c;查…

U盘文件损坏且无法读取怎么修复?五个方法帮你搞定

在现代社会&#xff0c;U盘已经是我们日常生活和工作中不可缺少的工具之一。U盘的容量大、体积小、携带方便&#xff0c;很多人都喜欢使用U盘用于个人和工作数据的存储和传输。但是&#xff0c;U盘和其他的电子设备一样&#xff0c;在试用期间有时候会出现U盘打不开提示目录结构…

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器&#xff0c;开启root 2.jadx&#xff1a; https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【CT】LeetCode手撕—21. 合并两个有序链表

目录 题目1-思路2- 实现⭐21. 合并两个有序链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;21. 合并两个有序链表 1-思路 双指针&#xff1a;题目提供的 list1 和 list2 就是两个双指针 通过每次移动 list1 和 list2 并判断二者的值&#xff0c;判断完成后将其 插入…

【Text2SQL 论文】CodeS:Text2SQL 领域的开源语言模型

论文&#xff1a;CodeS: Towards Building Open-source Language Models for Text-to-SQL ⭐⭐⭐⭐ arXiv:2402.16347, SIGMOD 2024 人大 Code: CodeS | GitHub 一、论文速读 本文提出一个开源的专门用于 Text2SQL 任务的 LLM —— CodeS&#xff0c;有多个参数规模的版本&…

揭秘App广告监测黑科技!Xinstall助你洞察用户行为,提升转化率!

在移动互联网时代&#xff0c;App的推广与运营已成为企业获取用户、提升品牌知名度的重要手段。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何确保广告投放的精准性、提高广告效果转化率&#xff0c;成为了摆在每一位推广者面前的难题。今天&#xff0c;我们就来聊聊如何…

盘点:支持国产化信创的项目管理软件有哪些?

对于个人或者预算充足的团队来说&#xff0c;找到一个靠谱、好用的项目管理软件是一件很有必要的事情&#xff0c;那么目前国内有哪些【国产化信创】的项目管理软件值得选择呢&#xff1f; 下面盘点10款&#xff0c;每一款都独具特色。 1、国产化项目管理软件&#xff0c;可灵活…

Go微服务框架Kratos中makefile命令的使用方法及报错处理

运用 kratos 微服务框架开发项目时&#xff0c;可以使用提供的 makefile 中的命令自动且快速生产相关代码&#xff0c;提高开发效率。 krotos中makefile文件内容如下&#xff1a; GOHOSTOS:$(shell go env GOHOSTOS) GOPATH:$(shell go env GOPATH) VERSION$(shell git descri…

【讯为Linux驱动开发】6.自旋锁spinlock

【自旋锁】 线程A获取自旋锁后&#xff0c;B假如想获取自旋锁则只能原地等待&#xff0c;仍占用CPU&#xff0c;不会休眠&#xff0c;直到获取自旋锁为止。 【函数】 DEFINE SINLOCK(spinlock t lock) 定义并初始化一个变量int spin lock init(spinlock t*lock) 初始化自…

工业4.0下的PLC进化论:ARMxy计算机如何重塑自动化

智能物流系统的高效与精准成为企业竞争力的关键。在这个背景下&#xff0c;传统的PLC系统因其固有的局限性&#xff0c;如扩展性差、系统封闭等&#xff0c;开始显得力不从心。ARMxy工业计算机作为新一代的PLC替代方案&#xff0c;凭借其低功耗、高性能以及高度的灵活性&#x…

OpenStack入门初体验

云计算概述 概念 侠义的云计算是指IT基础设施的交付和使用模式广义的云计算是指服务的交付和使用模式云计算资源 网络资源存储资源计算资源 云计算的服务模型 IaaS&#xff08;基础架构即服务&#xff09; IaaS 提供最底层的 IT 基础设施服务&#xff0c;包括处理能力、存储…

Spotify 音乐平台宣布成立内部创意机构,测试生成式人工智能配音广告

Spotify是一家流媒体音乐平台&#xff0c;提供广泛的音乐、播客和视频内容。用户可以通过订阅服务Spotify Premium来享受更多高级功能&#xff0c;如无广告播放、离线听歌等。 Spotify 周四宣布&#xff0c;它将通过其首家名为 Creative Lab 的内部创意机构进一步进军广告领域…

夏季城市环境卫生挑战多:TSINGSEE青犀智慧环卫方案助力城市垃圾站智能管理

一、背景分析 夏季&#xff0c;随着气温的攀升&#xff0c;城市垃圾的数量和种类也随之增加&#xff0c;这给环卫工作带来了极大的挑战。环卫垃圾站点作为城市垃圾处理的重要一环&#xff0c;其管理效率直接关系到城市环境的整洁与卫生。近年来&#xff0c;随着视频监控技术的…

Word恢复未保存文件怎么做?4招助你拯救数据!

“着急&#xff01;我在编辑Word文档时&#xff0c;还没有来得及保存文件&#xff0c;系统就崩溃了&#xff0c;现在文件找不到了&#xff0c;还有方法能找回来吗&#xff1f;” 在数字时代&#xff0c;我们的日常生活和工作都离不开Word文档。然而&#xff0c;我们有时候辛苦编…

YUV格式与RGB格式详解

图像处理 文章目录 图像处理前言YUV 格式YUV 采样 前言 像素格式描述了像素数据存储所用的格式&#xff0c;定义了像素在内存中的编码方式。RGB 和 YUV 为两种经常使用的像素格式。/ 1024 / 1024 2.63 MB 存储空间。 RGB 和 RGBA 格式 RGB 图像具有三个通道 R、G、B&#xff…

多模态大模型:识别和处理图片与视频的技术详解

多模态大模型&#xff1a;识别和处理图片与视频的技术详解 多模态大模型&#xff1a;识别和处理图片与视频的技术详解1. 什么是多模态大模型&#xff1f;2. 多模态大模型的基本架构3. 识别和处理图片3.1 图像特征提取3.2 图像分类与识别3.3 图像生成与增强 4. 识别和处理视频4.…

Idea jdk配置的地方 启动时指定切换的地方

jdk 配置的地方 项目sdk 所在位置 管理添加或删除的地方&#xff0c;增加后&#xff0c;可以在在上面切换 启动时指定版本