位置: IT常识 - 正文

Vue3-Pinia的基本使用

编辑:rootadmin
Vue3-Pinia的基本使用 什么是Pinia呢?

推荐整理分享Vue3-Pinia的基本使用,希望有所帮助,仅作参考,欢迎阅读内容。

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

Pina开始于大概2019,是一个状态管理的库,用于跨组件、页面进行状态共享(这和Vuex、Redux一样),用起来像组合式API(Composition API)

Pinia和Vuex的区别PInia的最初是为了探索Vuex的下一次迭代会是什么样子,结合了Vuex核心团队讨论中的许多想法;最终,团队意识到Pinia已经实现了Vuex5中大部分内容,所以最终决定用Pinia来替代Vuex;与Vuex相比,Pinia提供了一个更简单的API,具有更少的仪式,提供了Composition-API风格的API更重要的是,与TypeScript一起使用时具有可靠的类型推断支持与Vuex相比,Pinia很多的优势:

比如mutations不再存在:

mutations最初是为devtools集成,但这不在是问题他们经常认为是非常冗长

更友好的TpeScipt支持,Vuex之前对Ts的支持很不友好

不在有modules的嵌套结构

你可以灵活使用每一个store,他们是通过扁平化的方式来相互使用的;

不在有命名空间的概念,不在需要记住他们的复杂关系

如何使用Pinia

1、安装Pinia

yarn add pinianpm install pinia

2、创建pinia文件

store文件里index.js

import { createPinia } from 'pinia'const pinia = createPinia()export default pinia

3、main.js导入并引用

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

4、pinia的状态管理,不同状态可以区分不同文件

//定义关于counter的storeimport { defineStore } from ‘pinia’//defineStore 是返回一个函数 函数命名最好有use前缀,根据函数来进行下一步操作const useCounter = defineStore('counter',{state: () => {count:99}})export default useCounter

5、调用pinia,获取pinia状态值,导入Counter.js,获取Counter.js里面state.count

<template> <div class="home"> <h2>Home View</h2> <h2>count: {{ counterStore.count }}</h2> </div></template><script setup> import useCounter from '@/stores/counter'; const counterStore = useCounter()</script><style scoped></style>Vue3-Pinia的基本使用

注意:pinia解构出来的state也是可以调用,但会失去响应式,需要toRef或者pinia自带storeToRefs

<template> <div class="home"> <h2>Home View</h2> <h2>count: {{ counterStore.count }}</h2> <h2>count: {{ count }}</h2> <button @click="incrementCount">count+1</button> </div></template><script setup> import { toRefs } from 'vue' import { storeToRefs } from 'pinia' import useCounter from '@/stores/counter'; const counterStore = useCounter() // const { count } = toRefs(counterStore) const { count } = storeToRefs(counterStore) function incrementCount() { counterStore.count++ }</script><style scoped></style>store的核心部分:state,getter,action

(相当于:data、computed、methods)

认识和定义State

state是store的核心部分,因为store是用来帮助我们管理状态

操作State

读取和写入state:

默认情况下,可以通过store实例访问状态来直接读取和写入状态;

```const counterStore = useCounter()counterStore.counter++counterStore.name = 'coderWhy'```

重置State: 可以调用store上的$reset()方法将状态重置到其初始值

const counterStore = useCounter()conterStore.$reset()

改变State

除了直接用store.counter++修改store,还可以调用$patch

它允许您使用部分‘state’对象同时应该多个修改

const counterStore = useCounter()counterStore.$patch({counter:100,name:'kobe'})

替换State 可以通过将其$state属性设置为新对象替换Store的整个状态

conterStore.$state = {counter:1,name:'why'}认识和定义Getters

Getters相当于Store的计算属性:

它们可用defineStore()中的getters属性定义getters中可以定义接受一个state作为参数的函数expoer const useCounter = defineStore('counter',{state: () => {counter:100,firstname:'kobe'},getters:{doubleCounter(state){return state.counter *2}}})

访问Store里getters方法

访问当前store的getters:

const counterSotre = useCounter()console.log(counterStore.doublCounter)

我们可以使用this来访问当前的store实例中getters

expoer const useCounter = defineStore('counter',{state: () => {counter:100,firstname:'kobe'},getters:{doubleCounter(state){return state.counter *2}doubleCounterAdd(){//this指向storereturn this.doubleCounter +1 }}})

访问其它store的getters

import useUser from ./userconst userStore = useUser()expoer const useCounter = defineStore('counter',{state: () => {counter:100,firstname:'kobe'},getters:{//调用其它StoredoubleCounterUser(){return this.doubleCounter + userStore.umu}}})

通过getters可以返回一个函数,可以传参数

expoer const useCounter = defineStore('counter',{state: () => {counter:100,firstname:'kobe'},getters:{//调用其它StoredoubleCounter(state){return function (is) {return state.id + id}}}})const StoreConter = useCounter();//传参StoreCounter.doublCounter(111)认识和定义Actions

Actions 相当于组件中的methods,可以使用defineStore()中的actions属性定义

expoer const useCounter = defineStore('counter',{state: () => {counter:100,firstname:'kobe'},getters:{//调用其它StoredoubleCounter(state){return function (is) {return state.id + id}}},actions:{increment(){this.counter++},//传参incrementnum(num){this。counter += num}}})

和getters一样,在action中可以通过this访问整个store实例:

function increment(){//调用counterStore.increment()}function incrementnum(){counterStore.increment(10)}Actions执行异步操作:

Actions中是支持异步操作的,并且我们可以编写异步函数,在函数中使用await

actions:{async fetchHome(){//???请求const res = await fetch('?????')const data = await res.json()console.log('data',data)return data}}cosnt counterStore = useCountercounterStore.fetchHome().then(res => {console.log(res)})
本文链接地址:https://www.jiuchutong.com/zhishi/299275.html 转载请保留说明!

上一篇:前端开发是做什么的?工作职责(前端开发做什么副业)

下一篇:Vue 3 介绍

  • vivo桌面时间挂件怎么调出来(vivo桌面时间挂件)

    vivo桌面时间挂件怎么调出来(vivo桌面时间挂件)

  • 谷歌浏览器怎么设置无痕(谷歌浏览器怎么才能正常使用)

    谷歌浏览器怎么设置无痕(谷歌浏览器怎么才能正常使用)

  • 抖音卡通头像视频怎么拍呢

    抖音卡通头像视频怎么拍呢

  • 微信已实名认证为啥不能收红包(微信已实名认证怎么更改实名认证)

    微信已实名认证为啥不能收红包(微信已实名认证怎么更改实名认证)

  • 荣耀9x有息屏时钟吗(荣耀9x手机息屏时间设置)

    荣耀9x有息屏时钟吗(荣耀9x手机息屏时间设置)

  • 笔记本cpu占用过高怎么解决(笔记本cpu占用率太高怎么办)

    笔记本cpu占用过高怎么解决(笔记本cpu占用率太高怎么办)

  • 微信换了实名二维码要换吗(微信换了实名认证还能支付吗)

    微信换了实名二维码要换吗(微信换了实名认证还能支付吗)

  • 3dmax镜像的快捷键(3dmax镜像的快捷键是什么)

    3dmax镜像的快捷键(3dmax镜像的快捷键是什么)

  • 小红书头像为什么改不了(小红书头像为什么模糊)

    小红书头像为什么改不了(小红书头像为什么模糊)

  • oppo手机非常卡怎么解决呀(oppo手机很卡怎么办)

    oppo手机非常卡怎么解决呀(oppo手机很卡怎么办)

  • 剪贴板中存放的是什么(剪贴板中存放的信息)

    剪贴板中存放的是什么(剪贴板中存放的信息)

  • 中国电信hd收费吗(中国电信hd收费多少)

    中国电信hd收费吗(中国电信hd收费多少)

  • 苹果系统怎么下哔咔(苹果手机怎么降低系统版本)

    苹果系统怎么下哔咔(苹果手机怎么降低系统版本)

  • 抖音消息能看到已读吗(抖音消息能看到谁点赞吗)

    抖音消息能看到已读吗(抖音消息能看到谁点赞吗)

  • 黑莓手机怎么下载软件(黑莓手机怎么下载网易云音乐)

    黑莓手机怎么下载软件(黑莓手机怎么下载网易云音乐)

  • 小度小度可以下载软件吗(小度小度可以下载万能钥匙吗)

    小度小度可以下载软件吗(小度小度可以下载万能钥匙吗)

  • 电脑微信怎么更新(电脑微信怎么更新版本)

    电脑微信怎么更新(电脑微信怎么更新版本)

  • 红袋鼠点读笔怎么用(红袋鼠点读笔怎么联网)

    红袋鼠点读笔怎么用(红袋鼠点读笔怎么联网)

  • 淘宝子账号如何设置(淘宝子账号如何接待顾客)

    淘宝子账号如何设置(淘宝子账号如何接待顾客)

  • 微信文件传输助手在哪(微信文件传输助手是真人吗)

    微信文件传输助手在哪(微信文件传输助手是真人吗)

  • windows10如何截图(windows10如何截图全屏)

    windows10如何截图(windows10如何截图全屏)

  • Mac系统中如何通过Dialogue进行iPhone电话录音(mac怎么同步)

    Mac系统中如何通过Dialogue进行iPhone电话录音(mac怎么同步)

  • sftp命令  加密传输FTP文件(sftp 加密算法)

    sftp命令 加密传输FTP文件(sftp 加密算法)

  • mailx命令  发送和接收电子邮件(linux mail命令详解)

    mailx命令 发送和接收电子邮件(linux mail命令详解)

  • 个人所得税专项附加扣除子女教育
  • 消费税应该怎么缴纳
  • 应付职工薪酬在资产负债表怎么填
  • 分公司报增值税吗
  • 税控服务费减免政策
  • 税控服务费减免税款分录
  • 电信电话费计入成本吗
  • 利润总额和净利润相同说明什么
  • 一次性奖金并入综合所得
  • 公司车买的保险怎么查电子保单
  • 施工企业暂估成本税前扣除
  • 应收票据背书支付
  • 收到赔偿怎么做账
  • 零退税率可以做免税吗
  • 短期投资所得收入需要交税吗?
  • 什么时候需要计提税金及附加
  • 混合销售和兼营的区别
  • 电商无发票成本怎么做账
  • 核定征收取消了
  • 吊车租赁费计入什么会计科目
  • 小规模银行存款多笔小金额财务费用可以合并记账吗?
  • 信用减值损失借方余额在利润表中
  • 什么情况下一般纳税人可以转为小规模纳税人
  • 工程发票预交税金规定
  • 社保公积金外包对员工的利弊
  • 2021剑灵什么职业最强
  • 一般纳税人不能转为小规模纳税人吗
  • 退税收入计入营业外收入吗
  • 怎么在电脑上设置输入法
  • iphone7plus怎么设置5g网络
  • php排队系统
  • 鸿蒙系统怎么隐藏应用图标
  • 银行的贷款怎么发放
  • windows7电脑时间不对
  • 净损益是
  • kb4580325更新
  • php常用设计模式(大总结)
  • 财务收支审批制度主要包括
  • 转让子公司产生的投资收益在合并层面是不是全部抵消
  • 交强险必须交车船税一年多少钱
  • php输入月份输出天数
  • 小微企业免征增值税政策2023
  • vue-cli2.0
  • 应计入利得和损失项目的有
  • 提取现金准备发放工资
  • flex:4
  • python迭代器iterator
  • 跨区域涉税事项报验管理编号怎么填
  • 加工票可以抵扣吗
  • 融资租赁怎么计税
  • 关于种植养殖的手抄报
  • 房屋租赁水电费计入什么科目
  • 现金折扣要扣除什么费用
  • 资产负债表日后非调整事项应当在附注中披露
  • 哪些凭证是有效凭证
  • 生产中产生的废油漆桶等危险废物应当作为什么贮存
  • 进项发票冲红退回怎么做账
  • mysqli查询
  • 数据库时区与url连接设置的时区
  • 远程桌面连接 server 2016
  • centos7搭建nfs详细步骤
  • win10系统预览版
  • window10的微软商店在哪
  • win7登录账号
  • tensorflow for
  • 着色器模型
  • Javascript selection的兼容性写法介绍
  • easyui表格
  • unity3d怎么编程
  • 友盟的功能
  • js获取当前时间
  • jQuery xml字符串的解析、读取及查找方法
  • python按位与操作
  • 抓落实韧劲不足的具体表现
  • 直系亲属房产买卖过户税费
  • 人防异地建设费标准
  • 税控盘如何下载驱动程序及安全控件
  • 中国有没有豁免权
  • 一般纳税人认定书
  • 青岛市医保网上办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设