状态管理(pinia)

Pinia作为Vue的状态管理库,提供了简洁的state、getters和actions机制,无需Mutation,便于开发者理解和使用。它兼容Vue2和Vue3,支持扁平化存储结构,易于状态管理和组件间的通信。本文介绍了其安装配置、使用方法以及修改状态的不同策略。
摘要由CSDN通过智能技术生成
相当于 vuex5

优势

1. 兼容性,vue2vue3都可以使用

2. 抛弃了 Mutations 的操作,只有 state getters actions. 极大的简化了状态管理库的使用,让代码编写
更加容易直观。
3. 可以直接修改 state
4. 扁平化、独立化,每个仓库独立

 安装配置

1. 安装 npm i pinia
2. main.js 中创建 pinia 实例并安装
import { createApp } from 'vue'
import App from './App.vue'
// 导入pinia
import { createPinia } from 'pinia';
// vue实例
const app = createApp(App)
// 在vue实例上安装pinia
app.use(createPinia())
app.mount('#app')
3. 新建 store 文件夹,在其中新建 js 文件
import { defineStore } from 'pinia';
// 创建仓库
// 变量名必须use开头,defineStore第一参数是仓库id,第二个是配置
const useUser = defineStore('user', {
state() {
return {
// 数据
}
},
getters: {
},
actions: {
}
})
export default useUser;

使用

state
state 中添加数据
state() {
return {
// 数据
count: 0
}
},
在需要的页面中引入 useUser 使用
import useUser from '../store/user.js';
const user = useUser()
console.log(user.count);
getters
getters 中添加函数
getters: {
getCount() {
return this.count * 10;
}
},
在需要的页面中引入 useUser 使用
import useUser from '../store/user.js';
const user = useUser()
console.log(user.getCount);

修改

直接修改
直接在页面中修改 state 即可
import useUser from '../store/user.js';
const user = useUser()
console.log(user);
let change = () => {
// 直接修改
user.count++
}
$patch 同时修改多个
比一个一个修改性能好
import useUser from '../store/user.js';
let user = useUser()
const change = () => {
// 同时修改多个
user.$patch({
count: user.count + 1,
msg: 'hello pinia!'
})
}
$patch 修改数组或对象
这种方法适合复杂数据的修改,比如数组、对象的修改 , 因为它们的修改非常困难或代价高昂
import useUser from '../store/user.js';
let user = useUser()
const change = () => {
user.$patch((state) => {
// 修改数组、对象
state.userItems.push({ name: 'shoes', quantity: 1 })
state.userInfo.name = '李四'
})
}
$state
state 替换成新的对象
import useUser from '../store/user.js';
let user = useUser()
const change = () => {
user.$state = {
count : 1,
name : '张三'
}
}
actions
1. actions 中新建方法
actions: {
changeCount(data) {
// 通过this取值改值,所以不要使用箭头函数
this.count++
}
}
2. 在需要的地方调用
import useUser from '../store/user.js';
let user = useUser()
const change = () => {
user.changeCount(123)
}

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值