在vue3里pinia的一些常规使用和实战

2023-10-27

安装

首先,我们需要安装 pinia 包,可以使用 npmyarn 进行安装:

 npm install pinia

  yarn add pinia

创建 pinia

通过 defineStore 函数来创建一个 pinia

import {defineStore } from 'pinia'
export const myPinia = defineStore('myPinia',{
  state: () => ({
    count: 0
  }),
  actions: {
    addCount() {
      this.count++;
    }
  }
})

其中defineStore

  • 第一个参数为id,pinia的唯一标识符,用于在多个 pinia之间区分。
  • state:pinia的状态,必须是一个返回对象的函数。
  • actions:pinia的操作方法。

pinia一些自带方法

初始化pinia状态,还原pinia的state为初始化状态:pinia.$reset()

pinia.$subscribe 是 Pinia 提供的全局订阅 API,可以订阅 pinia上的属性变化。该 API 返回一个取消订阅的函数。

使用方法如下:

const unsubscribe = pinia.$subscribe((mutation, state) => {
  console.log('mutation:', mutation)
  console.log('state:', state)
})//订阅监听
unsubscribe() // 取消订阅 

该函数接受一个回调函数,回调函数接受两个参数:

  • mutation:表示 pinia的属性已经发生了变化。它是一个对象,其中包含以下属性:
    • type:类型为字符串,表示触发变化的操作名称。
    • payload:表示变化的新值。
  • state:表示当前 pinia的状态。这个值是一个对象,其中包含 pinia中的所有属性及其值。

最后,当你需要停止监听时,只需要调用返回的取消订阅的函数即可。

在组件中单独使用 pinia

在单独组件内使用,引入pinia文件:

<template>
  <div>
    Count: {{ pinia.count }}
    <button @click="pinia.addCount"></button> 
 </div>
 </template>
 <script setup>
import { onUnmounted } from 'vue'import { myPinia} from './pinia' const pinia = myPinia()
 // 初始化pinia状态,还原pinia的state为初始化状态
 pinia.$reset() 
const unsubscribe = pinia.$subscribe((mutation, state) => {
  console.log('mutation:', mutation)
  console.log('state:', state)
})//订阅监听

// 修改state部分属性 pinia.$patch((state) => {
  state.count = 2;
 })
// 修改state全部属性
pinia.$state = {count: 3}

onUnmounted(()=> {
  unsubscribe() // 取消订阅
})  </script>  

vue代码里监听 pinia的某个属性

我们可以使用 watch 函数或 watchEffect 函数来监听 pinia的变化。

使用 watch 函数来监听 pinia 的变化:

<template> 
  <div> 
   Count: {{ pinia.count }}
    <button @click="pinia.addCount"></button>
  </div> 
</template>
 <script setup>
import { watch } from 'vue'
import { myPinia} from './pinia' 
const pinia = myPinia()
  watch(() => pinia .count, (newVal, oldVal) => {
      console.log(`count changed from ${oldVal} to ${newVal}`)
    })
</script>  
 


                
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在vue3里pinia的一些常规使用和实战 的相关文章

  • 解析:Promise.when 有很多 Promise?

    解析文档 https www parse com docs js symbols Parse Promise html when https www parse com docs js symbols Parse Promise html
  • Web Worker 中的 RequireJS

    我正在尝试在网络工作者中使用 RequireJS 问题是我在使用它时不断收到以下错误 Uncaught Error importScripts failed for underscore at lib underscore js 我已经测试
  • Mat select - 获取selectionChange的旧值

    我有一个项目 其中有一个包含以下内容的表单mat select选择器 每当用户更改输入时 我都会向用户显示一个对话框来确认此操作 现在 The selectionChange 通知值何时更改并将新值传递为 event 当用户取消对话框时 有
  • 裁剪响应式全宽图像

    我必须剪辑跨越整个宽度的图像 以下事情对我不起作用 剪辑 这需要绝对位置 因此块元素不会堆叠在下面 背景位置 缩放时无法正确剪辑 放大时剪辑的部分会增加 反之亦然 包装器 包装器高度取决于浏览器宽度 因此其值应该是动态的 我使用了 seti
  • 如何在 mongodb-native findAndModify 中使用变量作为字段名称?

    在使用 mongodb native 驱动程序的这段代码中 我想增加在单独变量中指定的字段的值 问题在于 在这种情况下 inc 子句中的字段名称将是 变量 而不是变量的内容 在查询部分中 所选变量按预期工作并找到正确的 ID var sel
  • div 准备好后如何调用函数?

    我的 javascript 文件中有以下内容 var divId divIDer jQuery divId ready function createGrid Adds a grid to the html html 看起来像这样 div
  • 使用express记录所有GraphQL响应

    我成功地设置了记录 graphQL 错误 app use graphql graphqlHTTP request gt return schema rootValue request formatError error gt const p
  • 在 vuejs 上将 \n 替换为新行

    我正在尝试将 n 字符替换为来自端点的数据的新行 I tried p item licensedocument legal documentText replace r n r n g br p 并没有奏效 当我将replace 写入问题末
  • 如何将 iLike 运算符与 Sequelize 结合使用来进行不区分大小写的查询

    我使用 Sequelize 和 PostgreSQL 来管理我的数据库 我想执行不区分大小写的搜索查询 当我用谷歌搜索时 有人说我可以使用 iLike 运算符来做到这一点 我尝试以这种方式实现 var getRadiosByGenre fu
  • Xml、xsl Javascript 排序

    我正在寻找一种使用 javascript 对 xml 数据进行排序的方法 并希望最终过滤掉数据 我知道这一切都可以在 xsl 文件中实现 但我想在客户端进行 我已经搜索了多个使用 javascript 进行排序的地方 但其中大部分要么太特定
  • JavaScript 语法是什么:{Ci, CC}? [复制]

    这个问题在这里已经有答案了 我正在做一些 FF 附加开发 我看到这样的语法 var Cc Ci require chrome 只是好奇这个语法是什么 以及它是否对 FF 开发或其他东西有特殊意义 这称为解构赋值 它的一个特点是JavaScr
  • 使用 JSONP 时出现“无效标签”?

    我的 JSONP 请求有问题 数据不会显示 Firebug 显示 无效标签 错误 我的 JavaScript ajax url link dataType jsonp beforeSend function xhr var base64 b
  • 如何根据本地存储中的另一个数据响应推迟 XMLHttpRequest [重复]

    这个问题在这里已经有答案了 function to download pps compress txt from cloud server for global parameter set PPs function get pps para
  • 为什么使用 MarkForCheck() 和 setTimeout?

    我对 ChangeDetectorRef 中的 MarkForCheck 方法有疑问 对于一种用法我必须使用this cd markForCheck 因为在控制台中我获取了值 但它没有在视图上更新 setTimeout gt this ch
  • Opera Mobile 9.7 Beta 设置焦点 [重复]

    这个问题在这里已经有答案了 我们使用手持式扫描仪将物品移入和移出库存 扫描仪运行一个 ASP 页 该页提交表单以移动项目 我们最近购买了一台运行 Windows Mobile 6 1 的新扫描仪 很快就意识到 Mobile IE 完全没用
  • Cytoscape 布局 - 处理锁定节点

    我正在使用 vue cytoscape 渲染图形并浏览树状数据结构 我的目标是扩展父节点并保持它们在图中的位置 我想简单地添加新的子节点 我的方法是锁定当前节点 添加子节点并解锁节点 this cy nodes lock for let d
  • 以编程方式在 Highcharts 中使用缩放绘制矩形和线条

    我正在使用 Highcharts 进行一些编程绘图Highcharts Renderer http api highcharts com highcharts Renderer using path and rect 在下面的代码中 我手动
  • 电子节点集成不起作用,也普遍奇怪的电子行为[重复]

    这个问题在这里已经有答案了 我是 Electron 的新手 我一直在努力让它工作 我遇到了无法解释的行为 所以这里有一个总结 我无法让 Electron 和 html 之间的通信正常工作 即使我有nodeIntegration true 网
  • 如何比较 JavaScript 表格中的单元格并测试是否相等? indexOf 是如何工作的?

    我在 HTML 代码中创建了一个表格 它有 9 列和 13 行 它被 JavaScript 循环完全填满 该循环用几个数组中的人名填充它 但是 我想添加一个验证步骤 确保一行中没有两个单元格具有相同的值 并且每个单元格的值不会在其正下方的单
  • 阻止 Chrome 扩展程序的 popup.html 自动打开

    我正在创建一个 Chrome 扩展程序 其中包含background html每分钟从 API 请求一次信息的文件 收到信息后 它会发送消息popup html弹出窗口使用 JSON 信息将新的 HTML 元素附加到弹出窗口的主体上 问题是

随机推荐

  • 软件测试质量度量指标

    软件测试质量度量指标 度量模块 度量指标 统计方法 度量说明 产品完成度 1 需求通过率 已通过需求 已计划需求 体现需求的完成度 也常可以统计为 测试用例通过数 计划的测试用例总数 即默认用例覆盖是完全的 2 功能点通过率 已通过功能点
  • 安装驱动时出现“INF中的服务安装段落无效”

    今天安装ti开发板的驱动 在安装虚拟串口时出现 INF中的服务安装段落无效 以致驱动未安装成功 接下来我就说说我的解决过程 因为提示的是 inf中的 了解驱动的就知道有个扩展名为inf的文件 于是准备 打开驱动目录中的inf文件 如下图 有
  • 【延期至12月】2022年网络安全国际研讨会(CSW2022)

    延期至12月 2022年网络安全国际研讨会 CSW2022 重要信息 会议网址 www cybersecurityworkshop org 会议时间 2022年12月16 18日 召开地点 杭州 截稿时间 2022年10月20日 录用通知
  • 商业不是战争

    我在一个大客户那里工作的时候经常想这样一件事 他们 以及国内很多 IT或者非IT 企业 讲军事化管理 讲服从命令 为什么我总觉得这事不对 到底不对在什么地方 我想出来的结论是 商业不是战争 第一 商业的特点是negotiatable 战争是
  • 单链表中间值(经典案例,5分钟解决)

    一 题目描述 给定一个单链表 但不知该表的大小 现要求只遍历一次 找出位于单链表中间的值 输入 1 8 7 6 4 5 3 1 输出 6 样例输入 Copy 1 2 4 8 9 6 3 1 0 样例输出 Copy 9 二 实现方法 普通方法
  • 创新零售,京东重新答题?

    继新一轮组织架构调整后 京东从低价到下沉动作不断 新成立的创新零售部在京东老将闫小兵的带领下悄然完成了整合 近日 京喜拼拼已改名为京东拼拼 与七鲜 前置仓等业务共同承载起京东线上线下加速融合的梦想 同时 拼拼的更名 也被外界解读为京东重新点
  • 关于jdbc常见错误

    版本问题 如果运行时控制台报错 Exception in thread main com mysql jdbc exceptions jdbc4 MySQLNonTransientConnectionException Could not
  • k8s-pod的亲和度调度

    文章目录 1 Node Affinity 1 1 node节点的预制标签 1 2 自定义标签 1 2 1 给node增加标签 1 2 2 修改label 1 2 3 修改label 1 3 Require 1 4 Perferred 1 3
  • 商品消费计费课程设计

    具体代码如下 商品销售计费显示系统 输入品种 数量 单价 计算并显示顾客应付的款数 并打印清单 include
  • metasploitable2

    nmap使用 nmap sP IP段 掩码 范围内ping通的所有主机 通过抓包只看到发了arp包 还没有找全局域网内所有主机 nmap sP 192 168 43 0 24 PS 让nmap使用SYN包而不是ACK包来对目标主机进行扫描
  • pyinstaller 打包程序 出现错误的解决方法

    打开命令窗口进入到程序所在目录下 1 使用命令pyinstaller p C Python27 Lib site packages zmq SpiderTaskDistributor py 打包程序 p参数是添加的pyinstaller打包
  • Quartz简单应用(Springboot环境)

    需求 在项目中免不了会使用定时任务来执行一些自动化的操作 简单的定时任务可以在方法上加上 Schedule的注解来执行定时任务 但是如果有多个同级的模块在不同的时间点执行同一个方法 就没办法仅仅使用 Schedule来执行了 侃场景 现在某
  • Linux Tomcat JVM 参数调优

    Linux Tomcat JVM 参数调优 适用场景 Tomcat 长期运行过程遇到Caused by java lang OutOfMemoryError PermGen space或java lang OutOfMemoryError
  • VB.net对于datagride控件的使用及C#中datagrideView\bindingSource\bindingNavigator\tabcontrol控件的应用

    绑定数据源 DataSet ds new DataSet SqlConnection connection new SqlConnection netiFace ConnectionString ConnectionString conne
  • d指针在Qt上的应用及实现

    Qt为了使其动态库最大程度上实现二进制兼容 引入了d指针的概念 那么为什么d指针能实现二进制兼容呢 为了回答这个问题 首先弄清楚什么是二进制兼容 所谓二进制兼容动态库 指的是一个在老版本库下运行的程序 在不经过编译的情况下 仍然能够在新的版
  • pip使用踩坑集合

    1 python版本切换后 pip不好用了 报错如下 使用 python m pip install U pip 命令对pip进行更新 2 pip安装包时 报错如下 网络状态有问题 国外源挂梯子 国内源关梯子 3 windows系统下pyt
  • GD32 笔记 05:如何使用 DMA 配合 ADC,以软触发的方式采集电压

    文章目录 一 前言 二 主要代码 1 变量定义 2 初始化配置函数 GPIO ADC DMA 3 主函数 一 前言 测试时使用的 MCU 是 GD32E230 测试例程下载地址是 20210409 test gd32 usart dma z
  • Linux下安装NetworkManger

    NetworkManager简介 NetworkManager由一个管理系统网络连接 并且将其状态通过D BUS 是一个提供简单的应用程序互相通讯的途径的自由软件项目 它是做为freedesktoporg项目的一部分来开发的 进行报告的后台
  • 四:虚拟机是如何为对象分配内存空间的?

    指针碰撞 Bump the Pointer 空闲列表 Free List 假设Java堆中内存是绝对规整的 所有用过的内存都放在一边 空闲的内存放在另一边 中间放着一个指针作为分界点的指示器 那所分配内存就仅仅是把那个指针向空闲空间那边挪动
  • 在vue3里pinia的一些常规使用和实战

    安装 首先 我们需要安装 pinia 包 可以使用 npm 或 yarn 进行安装 npm install pinia yarn add pinia 创建 pinia 通过 defineStore 函数来创建一个 pinia import