vue3基礎(chǔ)教程之pinia配置和用法
在 vue3 項(xiàng)目經(jīng)常使用狀態(tài)管理器來存儲 用戶信息、token、路由信息 等數(shù)據(jù),vite 項(xiàng)目中使用比較多的一般是 pinia 存儲庫。
1. 安裝pinia
npm install pinia
2. 配置pinia
創(chuàng)建 store 文件夾,在里面創(chuàng)建 index.js ,在 store 下面創(chuàng)建 modules 文件夾,用來管理不同倉庫。
index.js文件
使用一個(gè) index 文件進(jìn)行統(tǒng)一的導(dǎo)出,就不需要在使用多個(gè)倉庫的時(shí)候?qū)懚鄠€(gè) import 了。
import { createPinia } from "pinia";
// 導(dǎo)出modules下面的所有倉庫
import { userStore } from "./modules/user"
...
...
const pinia = createPinia()
// 組合api添加$reset方法,用于重置狀態(tài)
pinia.use(({ store }) => {
const initialState = JSON.parse(JSON.stringify(store.$state))
store.$reset = () => {
store.$patch(initialState)
}
})
export default pinia
export { userStore }
組合api的寫法是沒有重置功能的,需要單獨(dú)寫一個(gè) $reset 的方法重置數(shù)據(jù)。
modules下面的倉庫文件
// 創(chuàng)建用戶信息倉庫
import { defineStore } from 'pinia'
export const userStore = defineStore('user', () => {
let name = ref('張三')
let age = ref(18)
let obj = reactive({
username: '韓梅梅',
address: '北京'
})
const changeName = (val) => {
name.value = val
}
return {
name,
age,
obj,
changeName
}
})
main.js中引入pinia倉庫
...
import pinia from '@/store'
app.use(pinia)
...
app.mount('#app')
vue頁面的使用
<template>
<div>
<div>{{ user.name }}</div>
<el-button type="primary" @click="changeName1">修改姓名</el-button>
<div>{{ age }}</div>
<el-button type="primary" @click="changeName2">修改年齡</el-button>
</div>
</template>
<script setup>
import { userStore } from '@/store'
import { storeToRefs } from 'pinia'
const user = userStore()
// 修改里面的值有3種寫法
const changeName1 = () => {
// 第一種 => 直接賦值
user.name = '李四'
// 第二種 => 使用$patch
user.$patch({
name: '李四'
})
// 第三種 => 使用倉庫里面的方法
user.changeName('李四')
};
// 如果是使用解構(gòu)的方式取值的話需要使用這個(gè)方法,否則取出來的值不是響應(yīng)式的
let { age } = storeToRefs(user)
// 修改年齡
const changeName2 = () => {
age.value++
}
// 使用重置方法
const reset = () => {
user.$reset();
}
</script>
storeToRefs 這個(gè)方法是修改解構(gòu)賦值的方法從倉庫取值,讓取出來的值也是響應(yīng)式的。
3. 持久化的插件使用
存儲在倉庫的數(shù)據(jù)如果刷新頁面會丟失,之前都是手動(dòng)將每個(gè)值存到本地存儲中 localStorage 或者sessionStorage 種。pinia-plugin-persistedstate 插件是讓倉庫中的數(shù)據(jù)自動(dòng)存儲到本地存儲中。
4. pinia-plugin-persistedstate
npm i pinia-plugin-persistedstate
5. 配置持久化插件
在 store 下面的 index.js 文件中編寫。
第一種方法
如果所有倉庫中的數(shù)據(jù)都需要存儲的情況下。
import { createPersistedState } from 'pinia-plugin-persistedstate' // 引入方法
pinia.use(createPersistedState({
storage: localStorage,
auto: true // 自動(dòng)存儲所有倉庫數(shù)據(jù)到localStorage
}))
第二種方法
每個(gè)倉庫單獨(dú)配置持久化的配置 => 將 auto: true 刪除。
在 modules 下面的 user.js 文件中編寫。
// 創(chuàng)建用戶信息倉庫
import { defineStore } from 'pinia'
export const userStore = defineStore('user', () => {
...
...
}, {
// 在這個(gè)地方配置持久化
persist: {
... 持久化配置如下
}
})
持久化配置方式如下:
1. 第一種配置
persist: true // 整個(gè)倉庫持久化
2. 第二種配置 (pick 和 omit 二選一)
persist: {
pick: ['obj.username', 'name'], // 存儲哪些
omit: ['obj.address'] // 忽略哪些不存儲
}
3. 第三種配置
persist: {
storage: sessionStorage 存儲的位置
}
4. 第四種配置
persist: {
key: 'my-userinfo' 存儲的名稱
}
5. 第五種配置 (一個(gè)倉庫每個(gè)參數(shù)不同的存儲方式)
persist: [
{
pick: ['name'],
storage: localStorage,
key: 'name'
},
{
pick: ['age'],
storage: sessionStorage,
key: 'age'
}
]
以上就是 pinia 和 pinia-plugin-persistedstate 插件的使用方式。
總結(jié)
到此這篇關(guān)于vue3基礎(chǔ)教程之pinia配置和用法的文章就介紹到這了,更多相關(guān)vue3 pinia配置和用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue打包項(xiàng)目并部署到Linux服務(wù)器中的全過程
文章介紹了如何使用Vue進(jìn)行項(xiàng)目打包,并部署到Linux服務(wù)器上,包括配置vue.config.js文件、創(chuàng)建config.js文件以更改請求地址、封裝axios請求、打包命令、部署到服務(wù)器、配置nginx以及隱藏后臺服務(wù)地址的方法2026-02-02
關(guān)于nuxt?store中保存localstorage的問題
這篇文章主要介紹了關(guān)于nuxt?store中保存localstorage的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue3.0 proxy設(shè)置代理不成功的問題及解決方案
這篇文章主要介紹了vue3.0 proxy設(shè)置代理不成功的問題及解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12
Vue實(shí)現(xiàn)手機(jī)橫屏效果的代碼示例
有時(shí)候一些頁面希望在手機(jī)上可以實(shí)現(xiàn)橫屏的效果,比如播放頁面,所以本文我們講給大家介紹Vue如何實(shí)現(xiàn)手機(jī)橫屏效果,文章通過代碼示例介紹的非常詳細(xì),感興趣的同學(xué)跟著小編一起來看看吧2023-08-08
vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能
這篇文章主要介紹了vue實(shí)現(xiàn)輸入一位數(shù)字轉(zhuǎn)漢字功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
結(jié)合康熙選秀講解vue虛擬列表實(shí)現(xiàn)
這篇文章主要為大家介紹了結(jié)合康熙選秀講解vue虛擬列表的原理使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07

