文章目录
- 一、介绍
- 二、install
- 三、store
-
- 1、创建并全局引入
- 2、使用
- 本人最近在找工作,有推荐的小伙伴私我,不胜感激。
一、介绍
- 官网:https://pinia.web3doc.top/introduction.html
- Pinia 是 Vue 官方团队开发的一个全新状态管理库
- Vue2和Vue3都可以使用
- 去除了mutations,简化了状态管理的使用
- 支持TS,Vuex对TS的语法支持不是完整的
- 去除了命名空间模块,鉴于 Store 的扁平架构,“命名空间” Store 是其定义方式所固有的,因为每个store都会有唯一的store id
二、install
pnpm install pinia --save
三、store
1、创建并全局引入
-
创建src/store/index.ts
-
main.ts中全局注册
// 引入pinia
import { createPinia } from 'pinia'
// 挂载到vue根实例
createApp(App).use(createPinia)
2、使用
- index.js
import {defineStore} from 'pinia'
/**
* 创建第1个store
*
* userStore:容器名称
* user:store的id,必须唯一
*/
export const userStore = defineStore('user', {
state: () => {
return {
user: {
name: 'kimi',
age: 18,
honor: [
'1-三好学生',
'1-优秀班干部',
'2-优秀班干部'
]
}
}
},
//普通函数的写法时,函数中的this代表该store
getters: {
/**
* 使用store
*
* @param store
* @returns
*/
getUserHonorNum: store => {
return store.user.honor.length
},
/**
* 使用本store的getters
*
* @param store
* @returns
*/
getUserAvgHonorNum: store => {
return store.getUserHonorNum / 3
},
/**
* 传入自定义参数
*
* @param store
* @returns
*/
getUserAvgHonorNumber: store => {
return year => {
return store.getUserHonorNum / year
}
服务器托管网 },
/**
* 访问其它store中的getters
*
* @param store
* @returns
*/
getAppNum: store => {
//导入其它store
const otherStore = appStore()
return otherStore.num
}
},
//actions书写格式和methods一样,因为他不会传入任何默认参数
//普通函数的写法时,函数中的this代表该store
actions: {
/**
* 年龄+1,异步操作,2秒之后再执行
*/
setAgeIncrement() {
setTimeout(() => {
this.user.age++
}, 2000)
},
/**
* 传入自定义参数 - 单个
*
* @param age
*/
setAge(age) {
this.user.age = age
},
/**
* 传入自定义参数 - 多个
*
* @param name
* @param age
*/
setUser(name, age) {
this.$patch((state) => {
state.user.name = name
state.user.age = age
})
}
}
})
/**
* 创建第2个store
*/
export const appStore = defineStore('app', {
state: () => {
return {
num: 5
}
},
getters: {
},
actions: {
}
})
- 组件中使用
script setup>
import { storeToRefs } from 'pinia'
import {userStore} from '@/store/index'
//store 是一个用reactive 包裹的对象
const userStoreData = userStore()
//1、state
//访问state
userStoreData.user
//就像setup 中的props 一样,我们不能对其进行解构,因为它会破坏响应式
const { user } = userStoreData
//为了从 Store 中提取属性同时保持其响应式,可以使用pinia的storeToRefs(), 它将为任何响应式属性创建refs
const { user } = storeToRefs(userStoreData)
//直接修改state中的共享状态
userStoreData.user.age++
//批量修改state中的共享状态,通过调用 $patch 方法
userStoreData.$patch((state) => {
state.user.name = 'sally'
state.user.age++
})
//通过调用store上的$reset()方法将状态重置到其初始值
userStoreData.$reset()
//订阅状态,与常规的 watch() 相比,使用 $subscribe() 的优点是 subscriptions 只会在 patches 之后触发一次
userStoreData.$subscribe((mutation, state) => {
/*
打印一下mutation
{
//类型
type: 'direct'、'patch object'、'patch function',
//store的id,创建store的第一个参数
storeId: 'user',
events:{......}
}
*/
})
//2、getters
userStoreData.getUserHonorNum
userStoreData.getUserAvgHonorNum
userStoreData.getUserAvgHonorNumber(3)//传入自定义参数
userStoreData.getAppNum
//3、actions
userStoreData.setAgeIncrement()
userStoreData.setAge(20)//传入自定义参数 - 单个
userStoreD服务器托管网ata.setUser('sally',25)//传入自定义参数 - 多个
/script>
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 编程探秘:Python深渊之旅—–云端部署(六)
为了提高可访问性和性能,团队决定将他们的应用部署到云平台。龙带领团队探索不同的云服务提供商和部署策略。 龙(自信地):将我们的应用部署到云端是一个明智的决策。云计算不仅提供可扩展性,还能让我们的应用全天候运行。 派超(好奇地):听起来很棒,但我们该如何开始呢?…