位置: IT常识 - 正文

快速搞懂Pinia及数据持久化存储(详细教程)

编辑:rootadmin
快速搞懂Pinia及数据持久化存储(详细教程) 一.安装及使用Pinia

推荐整理分享快速搞懂Pinia及数据持久化存储(详细教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

1.安装Pinia两种方式都可,根据个人习惯来

npm install piniayarn add pinia

2.在main.ts 中引入并挂载到根实例

// src/main.tsimport { createApp } from 'vue'import App from './App.vue'import { createPinia } from 'pinia'// 创建Vue应用实例// 实例化 Pinia// 以插件形式挂载Pinia实例createApp(App).use(createPinia()).mount('#app')

3.src目录下新建store/study/index.js并写入

Store 是用defineStore()定义的,它的第一个参数是一个独一无二的id,也是必须传入的,Pinia 将用它来连接 store 和 devtools。

defineStore()第二个参数可接受两类值:Setup函数或Options对象

state 属性: 用来存储全局的状态的,这里边定义的,就可以是为SPA里全局的状态了。

getters属性:用来监视或者说是计算状态的变化的,有缓存的功能。

actions属性:对state里数据变化的业务逻辑,需求不同,编写逻辑不同。说白了就是修改state全局状态数据的。

第一种Options式写法:

import { defineStore } from 'pinia'// `defineStore()` 的返回值命名最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾export const useStudyStore = defineStore('studyId', { state: () => { return { counter: 0, } }, getters:{}, actions:{}})

在Options式中:Store 的数据(data),getters 是 Store 的计算属性(computed),而actions则是 Store 的方法(methods)。

快速搞懂Pinia及数据持久化存储(详细教程)

第二种Setup式写法:

import { defineStore } from 'pinia'// `defineStore()` 的返回值命名最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾export const useStudyStore = defineStore('studyId', ()=>{ const count = ref(0) const name = ref('Ghmin') const computedTest= computed(() => count.value * 99) function int() { count.value++ } return { count, name, computedTest, int}})

在Setup式中:ref()成为state属性,computed()变成getters,function变成actions

4.使用Store

使用上面两种方式其中一种后,便可以在组件中使用Store了。

<script setup>import { useStudyStore } from '@/stores/study'const store = useStudyStore();</script>二.具体使用及属性与方法

1.定义数据

import { defineStore } from 'pinia'export const useStudyStore = defineStore('studyId', { state: () => { return { name: 'Ghmin', num:0 } },})

2.组件中使用

<template><div><h1>vue组件</h1>{{ name }}</div></template><script setup>import { useStudyStore } from '@/stores/study'const store = useStudyStore();let { name } = store;</script>

注:pinia可以直接修改state数据,无需像vuex一样通过mutations才可以修改,所以上面的let { name } = store 这种解构是不推荐的,因为它破坏了响应性。

而为了从 Store 中提取属性,同时保持其响应性,这里需要使用storeToRefs(),它将为每个响应性属性创建引用。当你只使用 Store 的状态而不调用任何action时,它会非常有用。使用方法如下

<template><div><h1>vue组件</h1>{{ name }}</div></template><script setup>//这里需要先引入import { storeToRefs } from 'pinia'import { useStudyStore } from '@/stores/study'const store = useStudyStore();//这样解构的属性将保持响应性let { name } = storeToRefs(store);// name.value 可以直接修改到Store中存储的值</script>

如果有多条数据要更新状态,推荐使用$patch方式更新。因为Pinia的官方网站,已经明确表示$ patch的方式是经过优化的,会加快修改速度,对程序的性能有很大的好处。

<template><div><h1>A组件</h1>{{ num}}{{ arr }}<button @click='btn'>按钮</button></div></template><script setup>import { storeToRefs } from 'pinia'import { useStudyStore } from '@/stores/study'const store = useStudySlet { num,arr } = storeToRefs(store);const btn = ()=>{//批量更新store.$patch(state=>{state.num++;state.arr.push({name:'Ghmin'});})}</script>

actions:对state里数据变化的业务逻辑,需求不同,编写逻辑不同。说白了就是修改state全局状态数据的。

import { defineStore } from 'pinia'export const useStudyStore = defineStore('studyId', { state: () => { return { num: 0 } }, getters:{}, actions:{ changeNum( val ){ this.num+= val; } }})<template><div><h1>使用actions</h1>{{ num}}<button @click='add'>加99</button></div></template><script setup>import { storeToRefs } from 'pinia'import { useStudyStore } from '@/stores/study'const store = useStudyStore();let { num} = storeToRefs(store);const add = ()=>{store.changeNum(10);}</script>

getters:和vuex的getters几乎类似,用来监视或者说是计算状态的变化的,有缓存的功能。

import { defineStore } from 'pinia'export const useStudyStore = defineStore('studyId', { state: () => { return { num: 0, } }, getters:{ numGetters(){ return this.counter + 999; } }, actions:{}})<template><div> <h1>getters的使用</h1>{{ num}}{{ numGetters}}</div></template><script setup>import { storeToRefs } from 'pinia'import { useStudyStore } from '@/stores/study'const store = useStudyStore();let { num,numGetters} = storeToRefs(store);</script>

三.数据持久化存储

使用pinia-plugin-persist实现数据持久化存储,具体使用请跳转Pinia持久化存储

http://t.csdn.cn/N8l9c

本文链接地址:https://www.jiuchutong.com/zhishi/297555.html 转载请保留说明!

上一篇:利用openpose提取自建数据集骨骼点训练st-gcn,复现st-gcn(openpose的输出)

下一篇:万字综述梳理ChatGPT----一文搞懂弄潮儿ChatGPT技术原理、行业现状、投资前景(一万字综述怎么写)

  • 手机sd卡根目录在哪(手机sd卡根目录)(手机sd卡根目录已满或其他未知错误)

    手机sd卡根目录在哪(手机sd卡根目录)(手机sd卡根目录已满或其他未知错误)

  • 红米10xpro机身尺寸是多少(红米10xpro手机长度)

    红米10xpro机身尺寸是多少(红米10xpro手机长度)

  • 电脑QQ怎么查自己被多少人特别关心(电脑qq怎么查自己的信息)

    电脑QQ怎么查自己被多少人特别关心(电脑qq怎么查自己的信息)

  • 华为手机后盖碎了怎么换(华为手机后盖碎了保修吗)

    华为手机后盖碎了怎么换(华为手机后盖碎了保修吗)

  • qq删好友巨轮多久回来(qq删好友巨轮会掉吗)

    qq删好友巨轮多久回来(qq删好友巨轮会掉吗)

  • 苹果朋友圈怎么发高清视频(苹果朋友圈怎么设置只可以看三天的)

    苹果朋友圈怎么发高清视频(苹果朋友圈怎么设置只可以看三天的)

  • 华为在哪里下载软件(华为下载软件在哪儿)

    华为在哪里下载软件(华为下载软件在哪儿)

  • 淘宝注册网店需要什么(淘宝注册网店需要交钱吗)

    淘宝注册网店需要什么(淘宝注册网店需要交钱吗)

  • 淘宝五星好评忘记截图怎么找回(淘宝五星好评忘记截图怎么找回 视频)

    淘宝五星好评忘记截图怎么找回(淘宝五星好评忘记截图怎么找回 视频)

  • 手机出现蓝色斑点,并且不断扩大(手机出现蓝色斑点 怎么办?)

    手机出现蓝色斑点,并且不断扩大(手机出现蓝色斑点 怎么办?)

  • 华为路由器ax3和pro的区别(华为路由器ax3和小米路由器ax3000)

    华为路由器ax3和pro的区别(华为路由器ax3和小米路由器ax3000)

  • 手机号过期了充了话费怎么办(手机号过期充值后可以退吗)

    手机号过期了充了话费怎么办(手机号过期充值后可以退吗)

  • 双十一用红包的钱可以退款吗(双十一用红包的订单退款了怎么办)

    双十一用红包的钱可以退款吗(双十一用红包的订单退款了怎么办)

  • 小米8保修期多久(小米8手机保修几年)

    小米8保修期多久(小米8手机保修几年)

  • 苹果数据线始终无法给安卓手机充电什么意思(苹果数据线为什么用一段时间就用不了了)

    苹果数据线始终无法给安卓手机充电什么意思(苹果数据线为什么用一段时间就用不了了)

  • 快充充电宝对手机有伤害吗(快充充电宝对手机型号有要求吗?)

    快充充电宝对手机有伤害吗(快充充电宝对手机型号有要求吗?)

  • 系统休眠文件删除后果(系统休眠文件删除后怎么恢复)

    系统休眠文件删除后果(系统休眠文件删除后怎么恢复)

  • 5gwifi支持什么手机(5g手机能用wifi速度快吗)

    5gwifi支持什么手机(5g手机能用wifi速度快吗)

  • 在苹果手机上下载的文件在哪里(在苹果手机上下载NBA 2K 23首月免费以后还能玩吗)

    在苹果手机上下载的文件在哪里(在苹果手机上下载NBA 2K 23首月免费以后还能玩吗)

  • 手机淘宝哪里领淘金币(淘宝领取教程)

    手机淘宝哪里领淘金币(淘宝领取教程)

  • qq讨论组怎么改群名片手机(qq讨论组怎么换群主)

    qq讨论组怎么改群名片手机(qq讨论组怎么换群主)

  • 论坛营销的特点(论坛营销的功能)

    论坛营销的特点(论坛营销的功能)

  • x23什么时候上市的(X23什么时候上市的)

    x23什么时候上市的(X23什么时候上市的)

  • 华为nova3i有红外线吗(华为nova3i红外线感应器)

    华为nova3i有红外线吗(华为nova3i红外线感应器)

  • cad大字体选哪个(cad2010大字体选什么)

    cad大字体选哪个(cad2010大字体选什么)

  • 在win7系统中,怎么创建宽带连接?(在win7系统中将打开窗口拖到屏幕顶端)

    在win7系统中,怎么创建宽带连接?(在win7系统中将打开窗口拖到屏幕顶端)

  • 工资与社保的关系怎么写
  • 经营性现金流量净额是什么意思
  • 个体户自有厂房怎么申请
  • 个体工商户税收起征点是多少?
  • 运输公司租入的车辆如何核算
  • 单位自有车辆
  • 餐饮企业员工
  • 购买国债兑现时要交税吗
  • 会计里面红字冲销是什么意思
  • 补提上个月折旧会计分录
  • 暂估入库库存出现负数怎么办?
  • 图书对方开具的证明
  • 外汇局网上申报
  • 总公司资金转入私人账户
  • 应发工资包含罚款吗
  • swupdtmr.exe - swupdtmr进程是什么意思 什么作用
  • 什么是电子发票图片
  • 违建罚款了还算违建吗
  • 快捷方式都变成pdf
  • 电脑qq聊天框变成一侧显示的软件版本
  • 自制原始凭证包括哪些凭证
  • 企业信用贷款账户是什么
  • uniapp单选功能
  • 生育津贴如何做账
  • 会计分录由什么要素组成
  • 最贵的域名是什么名字
  • mxnet github
  • Yii2中简单的场景使用介绍
  • php pdo连接sqlserver
  • thinkphp pathinfo
  • vscode怎么看错误提示
  • Vue 3 介绍
  • 为什么我的命令提示符里显示user
  • rust 入门教程
  • openssl 加密套件
  • 有进项税额转出怎么做账
  • userpasswords
  • 工业总产值和营业收入关系
  • mysql全局锁和表锁
  • 企业所得税本期已预交怎么算
  • 残疾人保证金的滞纳金怎么计算
  • java中file的用法
  • access使用查询设计视图计算并显示平均成绩
  • MicrosoftSQLserver2014
  • 一般纳税人简易征收最新政策
  • mustn't be allowed
  • 如何在sql server中打开已有数据库
  • mysql 指定my.cnf
  • 销售货物提供运输服务分录
  • 发票金额大于实际报销怎么做账
  • 车辆抵押贷款影响以后卖车吗
  • 购入的技术服务作为成本
  • 工程材料增值税税率是多少
  • 结转是什么意思啊
  • 购买发票打印机如何账务处理?
  • 营改增后建筑行业进项税能抵扣吗
  • 怎么设置现金流
  • 基本的select命令及作用
  • mysql8.0二进制安装
  • Win10预览版桌面图标和任务栏不翼而飞怎么办?
  • winxp纯净版系统
  • mac升级最新系统会卡么
  • imac 迅雷
  • windows xp系
  • unity怎么输出文件
  • SlidingMenu属性详解【Android】
  • shell脚本监控日志输出
  • django orm sqlalchemy
  • js怎么用jquery
  • js隐写
  • 根据公司发展需求
  • android设置背景颜色代码
  • jQuery中的AjaxSubmit使用讲解
  • android studio绑定按钮
  • 车辆购置税大厅办理流程
  • 出口退税退运需要什么
  • 季报逾期申报怎么写
  • 江苏省国税局局长是谁
  • 国家税务总局全国增值税查验平台
  • 湖南省地方税务局综合楼项目设计
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设