Pinia本质上依然是一个全局状态管理的库,用于跨组件、页面进行状态共享(这点和Vuex、Redux、Mobx一样)。
1.首先,本地要下载并配置好node
2.创建文件假,并用vscode打开
3.创建vue3项目
npm init vue@latest
项目名称:vue3demo1
进入到项目目录中:
命令行:
cd vue3demo1
下载配置环境:
命令行:
npm i
安装pinia-plugin-persistedstate
命令行:
npm i pinia-plugin-persistedstate
运行命令行:
npm run dev
main.js文件修改:
修改前:
import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')
修改后:
import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' //引入持久化插件
import App from './App.vue'
import router from './router'
const app = createApp(App)
app.use(createPinia().use(piniaPluginPersistedstate))
app.use(router)
app.mount('#app')
4.自定义store
src/stores/userstore.js:
没有持久化之前写法:
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useStore = defineStore('userStore', () => {
const token = ref(null)
// 赋值token-(普通函数)
function setToken(val){
token.value = val;
}
// 获取token-(箭头函数)
const getToken = () =>{
return token.value;
}
return { token, setToken, getToken }
})
持久化写法:
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useStore = defineStore('userStore', () => {
const token = ref(null)
const user = ref({
name:null,
age:null
})
// 赋值token-(普通函数)
function setToken(val){
token.value = val;
}
// 获取token-(箭头函数)
const getToken = () =>{
return token.value;
}
// 设置用户信息
const setUserInfo = (obj) => {
user.value.name = obj.name;
user.value.age = obj.age;
}
// 获取用户信息
const getUserInfo = () =>{
return user;
}
return { token, setToken, getToken,user,setUserInfo,getUserInfo }
},{
persist:true// 持久化全部
// 参数持久化
/*persist:{
key: 'testStore', //存储名称
storage: sessionStorage, // 存储方式 - sessionStorage、localStorage
//指定哪些数据需要被持久化。
//pick: ['token','user.name'],
//[] 表示不持久化任何状态
//pick:[],
//undefined 或 null 表示持久化全部数据
//pick:null
}*/
})
5、使用方法
AboutView.vue:
<template>
<div class="about">
<h1>token值:{{ store.token }}</h1>
<button @click="setMethod">设置token</button>
<button @click="getMethod">获取token</button>
<button @click="setUser">设置用户信息</button>
<button @click="getUser">获取用户信息</button>
<div>---------------</div>
<h1>用户姓名:{{ store.user.name }}</h1>
<h1>用户年龄:{{ store.user.age }}</h1>
</div>
</template>
<script setup>
import {useStore} from '@/stores/usersotre'
const store = useStore();
// 设置方法-普通方法
function setMethod(){
store.setToken("1111")
}
// 获取方法-箭头函数
const getMethod = () =>{
console.log("store.getToken()", store.getToken())
}
// 设置用户信息
const setUser = () =>{
store.setUserInfo({name:'zgy',age:38})
}
// 获取用户信息
const getUser = () =>{
console.log("store.getUserInfo()",store.getUserInfo())
}
</script>
<style>
@media (min-width: 1024px) {
.about {
min-height: 100vh;
align-items: center;
}
}
</style>