1.下载pinia
npm install pinia
2.下载持久化存储插件
npm i pinia-plugin-persist --save
2.在src下创建一个store文件夹,在store文件夹下创建index.ts
import {createPinia} from 'pinia'
// 引入pinia的持久化存储插件
import piniaPluginPersist from 'pinia-plugin-persist';
const pinia = createPinia()
//使用持久化插件
pinia.use(piniaPluginPersist)
export default pinia
3.在store文件夹下新建一个test.ts文件,里面就是你要是用的了
//引入pinia
import {defineStore } from 'pinia'
import axios from 'axios'
// 这个main是随便定义的标识
export const useMainStore = defineStore('main',{
state:()=>{
return{
count:10,
list:[
{name:'张三',age:18},
{name:'李四',age:28},
],
actionList:[],
}
},
getters:{
// 计算年龄
sum:(state)=>{
return state.list.reduce((pre,item)=>{
return pre+item.age
},0)
}
},
// 同步和异步皆可
actions:{
async getTimu(){
let res=await axios.get('https://www.cpengx.cn/static/timu/timu.json');
console.log(res)
// 将接口返回的数据赋值给state
this.actionList = res.data;
}
},
// 开启数据缓存--下面这种只是存在会话存储中sessionStorage
persist:{
enabled:true
},
// 开启数据缓存--下面这种只是存在本地存储中localStorage
persist:{
enabled:true,
strategies:[
{
key:'my_user',
storage:localStorage
}
]
},
})
4.在main.ts中引用pinia
import store from './store'
qpp.use(store)
5.在页面上使用pinia
<template>
<div>
商品数量:{{store.count}}
</div>
<button @click="add">state点击加加</button>
<button @click="patchClick">patch点击加5</button>
<button @click="patchClicks">替换state</button>
<button @click="resetState">重置状态</button>
<button @click="store.getTimu()">获取store里面的异步数据</button>
<div v-for="(item,index) in store.list" :key="index">
<h5>{{item.name}}---{{item.age}}</h5>
</div>
<h1>年龄:{{store.sum}}</h1>
</template>
<script lang="ts" setup>
//引入
import {useMainStore} from '../../store/test';
// store能拿到相关定义模块
const store =useMainStore();
// 对state修改
const add=()=>{
store.count++;
store.list.push({
name:'王五',
age:36
})
}
// $patch修改--写法1
const patchClicka=()=>{
store.list.push({
name:'钱六',
age:43
})
store.$patch({
count:store.count+5,
list:store.list,
})
}
// $patch修改--写法2
const patchClick=()=>{
store.$patch((state)=>{
state.list.push({
name:'钱六',
age:16
})
state.count+6
})
}
// 将整个store的state替换
const patchClicks=()=>{
store.$state={
count:100,
list:[{name:'小明',age:2}],
actionList:[]
}
}
// 重置state
const resetState=()=>{
store.$reset();
}
// 监听状态(仓库)
store.$subscribe((mutation,state)=>{
console.log(mutation,'------',state)
})
</script>
本文介绍了如何在Vue3项目中使用Pinia进行状态管理,并结合npm安装的pinia-plugin-persist插件实现数据的持久化存储。步骤包括安装Pinia和持久化插件,创建store目录及文件,引用Pinia到main.ts,以及在组件中使用Pinia。
713

被折叠的 条评论
为什么被折叠?



