Pinia的使用方法-ts(以及pinia持久化)
1、安装pinia
yarn add pinia
# 或者使用 npm
npm install pinia
npm install pinia-plugin-persistedstate --save
2、main.js中引入使用
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
const app = createApp(App)
app.use(pinia)
3、使用
(1)在src下面创建文件夹stores
(2)在stores文件夹下面创建index.ts文件
(3)index.ts文件中写代码(Option store,选项式APi)
import { ref, reactive, computed } from 'vue'
import { defineStore } from 'pinia'
import axios from 'axios'
export const useAgeStore = defineStore('xuzz',{
state:()=>{
return{
age:18,
name:'zhangsan',
arr:[1,2,3,4]
}
},
getters:{
getNameAndAge():string{
return this.getAge(5) + this.name
},
getAge:(state)=>{
return (data:number)=> state.age+data
},
getCount(state){
const countStore = useCounterStore();
const age = useAgeStore();
return age.age+countStore.count
}
},
actions:{
addAge(pa:number){
this.age +=pa
},
getuserInfo(){
const countStore = useCounterStore();
if(countStore.login()){
axios.get('http://127.0.0.1:4523/m1/4756862-0-default/api/auth/captcha').then((res:any)=>{
console.log(res);
})
console.log('调接口')
}
}
},
persist:{
key: 'piniaStore2',
storage: sessionStorage,
paths: ['name', 'age'],
}
})
(4)index.ts文件中写代码(setup store,组合式Api)
export const useCounterStore = defineStore('counter', () => {
const count = ref(10)
const doubleCount = computed(() => count.value * 2)
let reacName = reactive({})
let reacName2 = reactive([])
let reactiveName = reactive({
aa:'reactive响应式数据'
})
const reactiveName2 = computed(()=>reactiveName)
function increment() {
count.value++
reactiveName.aa='我是reactive中的值'
reacName = {
name:'zhangsan'
}
reacName2 = [
{
name:'lisi'
}
]
}
function login(){
return true
}
return { count, doubleCount, increment,login,reactiveName,reactiveName2,reacName,reacName2}
},{
persist:{
key: 'piniaStore',
storage: sessionStorage,
paths: undefined,
}
})