位置: 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 介绍

  • 9008模式是什么(9008模式原理)

    9008模式是什么(9008模式原理)

  • 手机换屏后会影响什么(手机换屏后会影响指纹解锁吗)

    手机换屏后会影响什么(手机换屏后会影响指纹解锁吗)

  • 微信被对方拉黑了咋加(微信被对方拉黑了怎么才能联系到她)

    微信被对方拉黑了咋加(微信被对方拉黑了怎么才能联系到她)

  • 表格里的文字怎么全部显示出来(表格里的文字怎么提取出来)

    表格里的文字怎么全部显示出来(表格里的文字怎么提取出来)

  • 加入用户体验计划要不要开(加入用户体验计划可以关闭吗)

    加入用户体验计划要不要开(加入用户体验计划可以关闭吗)

  • i59600kf配什么显卡(i59600k搭配什么主板)

    i59600kf配什么显卡(i59600k搭配什么主板)

  • 蚂蚁森林时间可以改吗(蚂蚁森林可以隐身吗)

    蚂蚁森林时间可以改吗(蚂蚁森林可以隐身吗)

  • qq删掉好友对方列表里就没有了吗(qq删掉好友对方聊天列表里还有吗)

    qq删掉好友对方列表里就没有了吗(qq删掉好友对方聊天列表里还有吗)

  • medly安卓闪退(medly安卓版下载教程)

    medly安卓闪退(medly安卓版下载教程)

  • 荣耀20pro怎么卸载东西(荣耀20s怎么卸载不用的软件)

    荣耀20pro怎么卸载东西(荣耀20s怎么卸载不用的软件)

  • 戴尔开机自检怎么取消(戴尔开机自检怎么自动打开的)

    戴尔开机自检怎么取消(戴尔开机自检怎么自动打开的)

  • 钉钉如何两个群同时视频会议(钉钉如何两个群一块直播)

    钉钉如何两个群同时视频会议(钉钉如何两个群一块直播)

  • 电池并联容量增大吗(电池并联容量增大,充电器该怎么配)

    电池并联容量增大吗(电池并联容量增大,充电器该怎么配)

  • 怎样解除手机反复重启(怎样解除手机反向充电)

    怎样解除手机反复重启(怎样解除手机反向充电)

  • 手机qq版本怎么降级(手机qq的版本)

    手机qq版本怎么降级(手机qq的版本)

  • 乐视手机怎么做动态壁纸(乐视手机怎样录屏教程)

    乐视手机怎么做动态壁纸(乐视手机怎样录屏教程)

  • 手机怎么改路由器密码(手机怎么改路由器信道)

    手机怎么改路由器密码(手机怎么改路由器信道)

  • vivo手机能遥控空调吗(vivo手机能遥控车库吗)

    vivo手机能遥控空调吗(vivo手机能遥控车库吗)

  • 微信的数字证书何用(微信的数字证书没操作自己就启用了?)

    微信的数字证书何用(微信的数字证书没操作自己就启用了?)

  • 微信实名制后别人能不能看到真实信息(微信实名制别人盗用可以拿去贷款吗)

    微信实名制后别人能不能看到真实信息(微信实名制别人盗用可以拿去贷款吗)

  • 苹果商标的由来(苹果商标的含义)

    苹果商标的由来(苹果商标的含义)

  • iphone11是高通基带吗?(苹果11采用高通基带)

    iphone11是高通基带吗?(苹果11采用高通基带)

  • word默认字体怎么设置(word默认字体怎么改成宋体)

    word默认字体怎么设置(word默认字体怎么改成宋体)

  • iphonex掉帧怎么解决(苹果x手机掉帧解决方法)

    iphonex掉帧怎么解决(苹果x手机掉帧解决方法)

  • mac os x 10.10新特性有哪些?mac os x 10.10新功能汇总介绍(macos新版本)

    mac os x 10.10新特性有哪些?mac os x 10.10新功能汇总介绍(macos新版本)

  • 织梦dedecms图片按月存放怎么实现?代码分享(织梦官方)

    织梦dedecms图片按月存放怎么实现?代码分享(织梦官方)

  • 公司不开票要交工会经费吗
  • 印花税缴纳方式一经选择1年之内不得修改
  • 交增值税及附加税怎么做账
  • 单位当月未扣社保怎么处理分录?
  • 社保年检申报错误怎么办
  • 制造费用多结转了下月如何调整
  • 怎么从营业执照上看是不是一般纳税人
  • 实缴注册资本交税吗
  • 固定资产装修费用计入房产税吗
  • 房产税和城镇土地使用税的区别
  • 个人向个人借款100万交税吗
  • 财务报表季报申报报表要分开申报吗
  • 增值税加计扣除是什么意思啊
  • 未过户的车辆对车辆影响
  • 扣缴个人所得税报告表
  • 建筑材料资源利用
  • 不再认证时段内
  • 如何理解出口退税政策
  • 税收六项减免
  • 车票进项税可以跨年抵扣吗
  • 福利费计提包括奖金吗
  • 应付账款暂估款的会计分录
  • win7系统为什么没有无线网络连接
  • 摊销房租费如何做账
  • w7防火怎么开
  • 收外汇的账务处理实例
  • 3gwifi怎么用
  • mediabrowser.exe是什么
  • u盘数据全部丢失
  • bds.exe
  • Java8 Stream流Collectors.toMap当key重复时报异常(IllegalStateException)
  • 深红玫瑰鹦鹉多钱一个
  • 注册教育培训机构需要哪些手续
  • jsonp解决跨域问题spring3.0
  • 从零开始吧
  • android界面源码
  • php微信公众账号是什么
  • 补缴以前年度企业所得税如何做账
  • 什么时候需要结转损益
  • 建筑行业预交增值税怎么结转
  • 受托代销商品的手续费计入什么科目
  • 发票已经勾选却统计不出来
  • 企业所得税退回应交税费会计分录
  • sql数据库聚集索引和非聚集索引的区别是什么?
  • 计提的坏账准备计入什么科目
  • 什么叫同级财政收支
  • 普惠性幼儿园是什么意思
  • 差旅费误餐补助
  • 营业外收入可以冲减管理费用吗
  • 专利年费计入哪里
  • 项目清算后未售房产怎么纳税
  • 印花税是如何计征的
  • 一般纳税人的进项税率是多少
  • 不能抵扣的进项税怎么做账务处理
  • 购买软件会计科目
  • mysql数据库增量备份命令
  • 查找星期几
  • winxp系统安装教程
  • Apple Watch怎么解绑ID
  • 2015微软发布会
  • wmiprvse.exe是什么程序
  • Win10 Mobile/PC RS2快速预览版14926同步推送
  • win7无权关闭计算机
  • 果粉必修课 盘点Mac OS X系统发展史
  • paytime.exe - paytime是什么进程 有什么用
  • win10恢复到win7系统
  • cocos2d getPosition()取不到实际坐标问题
  • vbs和批处理区别
  • jquery左右移动动画效果
  • 实用的批处理
  • shell脚本 教程
  • jquery设置宽高
  • shell脚本的实现
  • node react vue
  • android刷新activity
  • python selectfrommodel
  • 水利基金税率‰6什么时候调整
  • 3.0车船税多少钱
  • 个体工商户地税怎么申报
  • 企业税收筹划的最终目的
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设