【VUE3】Pinia

目录

0前言

1 手动添加Pinia

2 创建与使用仓库(Setup Store 组合式)

2.1 创建仓库

2.2 使用仓库数据

2.3 解构响应式数据

3 持久化插件


0前言

官网:Pinia | The intuitive store for Vue.js


1 手动添加Pinia

上手之后,可以通过create-vue脚手架勾选Pinia快速添加

第一步:安装Pinia

在没有Pinia的相目中,执行以下命令

npm i pinia

第二步:在main.js中添加pinia

此处为VUE3的操作,VUE2的操作请见官方文档:开始 | Pinia

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const pinia = createPinia() // 创建Pinia实例
const app = createApp(App) // 创建根实例app.use(pinia) // pinia插件的安装配置
app.mount('#app') // 视图的挂载

也可以用链式写法:

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'const pinia = createPinia()createApp(App).use(pinia).mount('#app')

2 创建与使用仓库(Setup Store 组合式)

另一种方式(Option Store 选项式)见 定义 Store | Pinia 

2.1 创建仓库

你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
(比如 `useUserStore`,`useCartStore`,`useProductStore`)
第一个参数是你的应用中 Store 的唯一 ID

// store/count.js
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'export const usecountStore = defineStore('count', () => {// ———————————————————声明数据 state—————————————————————const number1 = ref(1)// ———————————————————声明方法 actions—————————————————————const addNum = () => {// 同步number1.value++}const subNum = () => {// 异步 - 模拟异步,1s后操作setTimeout(() => {number1.value--}, 1000)}// ———————————————————声明计算属性—————————————————————const doubleNum = computed(() => number1.value * 2)// ———————————————————导出属性与方法—————————————————————return {number1,addNum,subNum,doubleNum}
})

2.2 使用仓库数据

<script setup>
// 导入仓库
import { usecountStore } from '@/store/count'
// 获取数据
const count = usecountStore()
</script><template><div>number1: {{ count.number1 }}</div><div>doubleNumber1: {{ count.doubleNum }}</div><button @click="count.addNum">+1</button><button @click="count.subNum">-1</button>
</template><style scoped></style>

2.3 解构响应式数据

直接解构仓库中的响应式数据时,会得到非响应式的数据,需要用pinia中的 storeToRefs() 方法

注意:actions不需要!因为我们并不会改方法

<script setup>import { storeToRefs } from 'pinia'
const store = useCounterStore()// `name` 和 `doubleCount` 是响应式的 ref
// 同时通过插件添加的属性也会被提取为 ref
// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性const { name, doubleCount } = storeToRefs(store)// 作为 action 的 increment 可以直接解构const { increment } = store</script>

3 持久化插件

官网:Pinia Plugin Persistedstate

vue2持久化插件:GitHub - robinvdvleuten/vuex-persistedstate

第一步:安装插件 pinia-plugin-persistedstate

npm i pinia-plugin-persistedstate

第二步:在main.js中使用

import persist from 'pinia-plugin-persistedstate'
...
app.use(createPinia().use(persist))

第三步:在仓库中配置

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'export const useCounterStore = defineStore('counter', () => {...return {count,doubleCount,increment}
}, {persist: true    //只需要配置这里
})

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

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

相关文章

JVM 每个区域分别存储什么数据?

JVM&#xff08;Java Virtual Machine&#xff09;的运行时数据区&#xff08;Runtime Data Areas&#xff09;被划分为几个不同的区域&#xff0c;每个区域都有其特定的用途和存储的数据类型。以下是 JVM 各个区域存储数据的详细说明&#xff1a; 1. 程序计数器 (Program Cou…

C++中shared_ptr 是线程安全的吗?

在 C 中&#xff0c;shared_ptr 的线程安全性和实现原理可以通过以下方式通俗理解&#xff1a; 1. shared_ptr 是线程安全的吗&#xff1f; 答案&#xff1a;部分安全&#xff0c;需分场景&#xff01; 安全的操作&#xff1a; 引用计数的增减&#xff1a;多个线程同时复制或销…

什么是 CSSD?

文章目录 一、什么是 CSSD&#xff1f;CSSD 的职责 二、CSSD 是如何工作的&#xff1f;三、CSSD 为什么会重启节点&#xff1f;情况一&#xff1a;网络和存储都断联&#xff08;失联&#xff09;情况二&#xff1a;收到其他节点对自己的踢出通知&#xff08;外部 fencing&#…

arm64平台下linux访问寄存器

通用寄存器 示例&#xff1a;读取寄存器值 // 用户态程序或内核代码中均可使用 unsigned long reg_value; asm volatile ("mov %0, x10" // 将X10的值保存到reg_value变量: "r" (reg_value) ); printk("X10 0x%lx\n", reg_value);示例&…

超级好用的小软件,连接电脑和手机。

将手机变成电脑摄像头的高效工具Iriun Webcam是一款多平台软件&#xff0c;能够将手机摄像头变成电脑的摄像头&#xff0c;通过简单的设置即可实现视频会议、直播、录制等功能。它支持Windows、Mac和Linux系统&#xff0c;同时兼容iOS和Android手机&#xff0c;操作简单&#x…

Mysql MIC高可用集群搭建

1、介绍 MySQL InnoDB Cluster&#xff08;MIC&#xff09;是基于 MySQL Group Replication&#xff08;MGR&#xff09;的高可用性解决方案&#xff0c;结合 MySQL Shell 和 MySQL Router&#xff0c;提供自动故障转移和读写分离功能&#xff0c;非常适合生产环境 2、部署 …

PERL开发环境搭建>>Windows,Linux,Mac OS

特点 简单 快速 perl解释器直接对源代码程序解释执行,是一个解释性的语言, 不需要编译器和链接器来运行代码>>速度快 灵活 借鉴了C/C, Basic, Pascal, awk, sed等多种语言, 定位于实用性语言,既具备了脚本语言的所有功能,也添加了高级语言功能 开源.免费 没有&qu…

ubuntu改用户权限

在 Linux 系统中&#xff0c;赋予普通用户 sudo 权限可以让他们执行一些需要 root 权限的命令&#xff0c;而不需要频繁切换到 root 用户。以下是具体步骤&#xff1a; 创建用户(useradd和adduser两种方式) 首先&#xff0c;需要创建一个新的用户。可以使用 adduser 或 usera…

蓝桥杯 web 学海无涯(axios、ecahrts)版本二

答案&#xff1a; // TODO: 待补充代码// 初始化图表的数据&#xff0c;设置周视图的初始数据 option.series[0].data [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 周数据&#xff08;每周的总学习时长&#xff09; option.xAxis.data ["2月第1周", "…

Java 大视界 -- Java 大数据在智慧文旅虚拟场景构建与沉浸式体验增强中的技术支撑(168)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

API vs 网页抓取:获取数据的最佳方式

引言 在当今数字化时代&#xff0c;对于企业、研究人员以及开发人员而言&#xff0c;获取准确且及时的数据是大多数项目成功的关键因素。目前&#xff0c;收集网页数据主要有两种常用方法&#xff0c;即使用 API&#xff08;应用程序接口&#xff09;和网页抓取。然而&#xf…

车载以太网网络测试-25【SOME/IP-报文格式-1】

目录 1 摘要2 SOME/IP-报文格式2.1 **Service ID / 16 bits**2.2 **Method ID / Event ID / 16 bits**2.3 **Length / 32 bits**2.4 **Client ID / 16 bits**2.5 Session ID / 16 bits2.6 Protocol Version / 8 bits2.7 Interface Version / 8 bits2.8 Message Type / 8 bits2.…

Python数据可视化-第3章-图表辅助元素的定制

环境 开发工具 VSCode库的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本书为《Python数据可视化》一书的配套内容&#xff0c;本章为第3章-图表辅助元素的定制 本章主要介绍了图表辅助元素的定制&#xff0c;包括认识常用的辅助元素、设置坐标轴的标签、设置刻度范…

小程序30-wxml语法-声明和绑定数据

小程序页面中使用的数据均需要在Page() 方法的 data对象中进行声明定义 在将数据声明好以后&#xff0c;在 WXML 使用 Mustache 语法 ( 双大括号{{ }} ) 将变量包起来&#xff0c;从而将数据绑定 在 {{ }} 内部可以做一些简单的运算&#xff0c;支持如下几种方式: 算数运算三…

ubuntu开启黑屏现象解决

文章目录 前言一、问题描述二、解决方案1. 检查显卡驱动解决步骤&#xff1a; 2. 修复 GRUB 配置解决步骤&#xff1a; 3. 使用恢复模式解决步骤&#xff1a; 三、验证与总结 前言 在使用 Ubuntu 操作系统时&#xff0c;一些用户可能会遇到开机后屏幕黑屏的现象。这种问题可能…

Modbus TCP转Profibus DP网关接防撞雷达与PLC通讯

Modbus TCP转Profibus DP网关接防撞雷达与PLC通讯 在工业自动化领域&#xff0c;通信协议的多样性既是技术进步的体现&#xff0c;也给系统集成带来了挑战。Modbus TCP和Profibus DP是两种广泛应用于不同场景下的通信标准&#xff0c;它们各有优势但也存在着互操作性的需求。本…

分布式锁方案-Redisson

分布式锁&#xff1a;Redisson还实现了Redis文档中提到像分布式锁Lock这样的更高阶应用场景。事实上Redisson并没有不止步于此&#xff0c;在分布式锁的基础上还提供了联锁&#xff08;MultiLock&#xff09;&#xff0c;读写锁&#xff08;ReadWriteLock&#xff09;&#xff…

【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现

一、项目背景与技术选型 在上篇文章实现"选中即问AI"功能的基础上&#xff0c;本文重点解决AI对话窗口的集成与核心功能菜单的开发。通过Notepad插件体系&#xff0c;我们将实现以下功能矩阵&#xff1a; AI交互系统&#xff1a;支持自然语言提问与任务执行代码智能…

ControlNet-Tile详解

一、模型功能与应用 1. 模型功能 ControlNet-Tile模型的主要功能是图像的细节增强和质量提升。它通过以下几个步骤实现这一目标&#xff1a; 语义分割&#xff1a;模型首先对输入的图像进行语义分割&#xff0c;识别出图像中不同的区域和对象。这一步是为了让模型理解图像的内…

英飞凌高信噪比MEMS麦克风驱动人工智能交互

导言 在英飞凌&#xff0c;我们一直坚信卓越的音频解决方案对于提升消费类设备的用户体验至关重要。我们坚定不移地致力于创新&#xff0c;在主动降噪、语音透传、录音室录音、音频变焦和其他相关技术方面取得了显著进步&#xff0c;对此我们深感自豪。作为MEMS麦克风的领先供…