pinia安装使用
创始人
2024-03-06 23:50:35
0

pinia中文文档

目录

一.pinia简介

二. pinia安装

 三.pinia使用

1.main.js中创建pinia实例

2.创建store状态库

定义state

state的读写

state响应式解构

state的修改

Getters的使用

Pinia中Store的互相调用


一.pinia简介

Pinia是vue生态里Vuex的替代者,一个全新的vue状态管理库。
Pinia·是·Vue 的存储库,它允许您跨组件/页面共享状态
(让你可以在页面间实现数据的共享)
 

二. pinia安装

npm install pinia

package.json包中含有pinia

 三.pinia使用

1.main.js中创建pinia实例

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

2.创建store状态库

在src目录下创建一个store包

store下建user.js

定义state

state是pinia的核心,是存储数据的地方,例如我们要存储一个user对象

import {defineStore} from 'pinia'
import {ref} from "vue";
//第一种写法
export default defineStore('first',()=>{const name=ref('name')const age=ref(12)return {name,age}
})
//第二种写法
export default defineStore('user',{state:()=>{return {name:'name',age:12}}
})

state的读写

 当我们更改表单中的数据时,前面的字符也会跟着改变,这种改变是通过更改状态库的数据而进行改变的

state响应式解构

const {name,age} = StoreToRefs(userStore())

state的修改

使用patch修改

const handleClickPatch = () => {userStore.$patch((state)=>{userStore.name='小明'})
}

先在store中写好action方法,再调用action

action中方法的创建

actions: {changeState(){this.age++this.name = 'change helloPinia!!!'}
}

action中方法的调用

const handleClickActions = ()=>{userStore.changeState()
}

Getters的使用

计算属性,可以对state进行计算操作,它就是Store的计算属性,虽然在组件内也可以做计算属性,但是geetters可以在多组件之间复用,如果一个状态只在一个组件内使用是可以不用getters

例如

import {defineStore} from 'pinia'
import {ref} from "vue";export default defineStore('first',{state:()=>{const name=ref('name')const age=ref(12)return {name,age}},
getters:{ageAdd(state){return this.age++}
},
action:{}
})

 这样,ageAdd可以直接通过store.ageAdd调用

例如

{{userStore.ageAdd}}

Pinia中Store的互相调用


在上面代码中我们一直只使用了一个Store仓库,在真实项目中我们往往是有多个Store的。有多个Stroe时,就会涉及Store内部的互相调用问题。

第一步:新建一个Store仓库
在\src\store下新建一个Hyy.ts文件:

import { defineStore } from 'pinia'export const hyyStore = defineStore("hyyStore", {state:() => { return {list:["黄黄","小黄","黄小黄"]} },getters: {},actions: {}
})


这是一个非常简单的仓库,只有state(状态数据),需要注意的是ID要是唯一的。有了这个仓库后,就可以回到index.ts这个仓库中调用了。

第二步:先引入Hyy这个store。

import { hyyStore } from './hyy'


第三步:然后在actions部分加一个getList( )方法。
这部分就写的很简单了,只是用console.log( )打印到控制台 上就可以了。

actions: {changeState(){this.count++this.helloPinia = 'change helloPinia!!!'},getList(){console.log(hyyStore().list)}
}



这样就实现了两个store中互相调用。

相关内容

热门资讯

三部门:不断完善学前教育成本分... 观点网讯:12月23日,国家发展改革委、教育部、财政部联合发布《关于完善幼儿园收费政策的通知》,要求...
汪清林区法院:化解未成年人纠纷... 近日,吉林省汪清林区法院审结了一起涉未成年人在校遭受人身损害案件,法院充分考量了未成年人的行为特点及...
北京市长城保护条例 北京市人民代表大会常务委员会公告 〔十六届〕第45号 《北京市长城保护条例》已由北京市第十六届人民代...
棒杰股份(002634)披露关... 截至2025年12月23日收盘,棒杰股份(002634)报收于5.28元,较前一交易日下跌4.52%...
高盛再度唱多!预计中国股市到2... 来源:视觉中国 界面新闻编辑 | 江怡曼 近日,高盛发布名为《中国策略:2025年中国股市十大...
尤文身价变化:共10人身价下降... 在意甲联赛的激烈竞争中,尤文图斯的球员身价变化引发了广泛关注。根据最新的德转数据,尤文队内有10名球...
美国发布H-1B签证新规,优先... 当地时间12月23日,美国国土安全部发布新规,正式以“加权选择”机制取代H-1B签证原有的随机抽签制...
悉尼恐袭事件,意外替德国默茨政... 刚刚过去的一周,发生在澳大利亚的悉尼邦迪海滩恐怖袭击事件引起全球关注。 对于万里之外的德国而言,这场...
视频丨“粤车南下”驶入香港市区... 今天(12月23日),“粤车南下”驶入香港市区政策正式实施,符合条件的广东私家车可直接驶入香港市区,...
立白回应与经销商解约纠纷:个别... 12月23日,红星新闻报道《多地代理商称与立白集团解约后 对方未按约交接市场致严重损失,律师解读》一...