vue中pinia數(shù)據(jù)一直重復(fù)獲取之前的值的解決方法
概要
如果想讓pinia數(shù)據(jù)不會重復(fù)獲取之前的值需要手動強(qiáng)制觸發(fā) Pinia store 的狀態(tài)更新。
場景描述
有個業(yè)務(wù)如果token有效期失效需要重新跳轉(zhuǎn)到login頁面。
技術(shù)細(xì)節(jié)
不進(jìn)行手動刷新
路由守衛(wèi)
router.beforeEach( async(to: any, from: any, next: any) =>{
let userStore = useUserStore()
let token = userStore.token;
if(token){
try {
// token有效期驗(yàn)證(能訪問表示token有效)
await userStore.queryUser(0,1)
next()
}catch (error){
//無效移除user信息并跳轉(zhuǎn)到登錄頁
REMOVE_USER()
next("/login")
}
}else if(to.path == "/login"){
next()
}else {
next("/login")
}
})
pinia數(shù)據(jù)
let useUserStore = defineStore("User", {
state: (): any => {
return {
token: GET_USER(),
menuList: constantRoutes,
username: "",
avatar: ""
}
},
actions: {
refreshToken() {
this.token = GET_USER();
},
// other actions}



根據(jù)以上代碼發(fā)現(xiàn)直接獲取pinia中的數(shù)據(jù),就算移除了user,數(shù)據(jù)還是保持沒移除之前的數(shù)據(jù)。導(dǎo)致重復(fù)執(zhí)行await userStore.queryUser(0,1);
把
try {
await userStore.queryUser(0,1)
next()
}catch (error){
REMOVE_USER()
next("/login")
}
改為
try {
await userStore.queryUser(0,1)
next()
}catch (error){
REMOVE_USER()
userStore.refreshToken()
next("/login")
}
實(shí)現(xiàn)手動刷新token的值獲取最新的值。


成功獲取到token的最新狀態(tài),token失效跳轉(zhuǎn)到首頁。
以上就是vue中pinia數(shù)據(jù)一直重復(fù)獲取之前的值的解決方法的詳細(xì)內(nèi)容,更多關(guān)于vue pinia重復(fù)獲取的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue.js項(xiàng)目中管理每個頁面的頭部標(biāo)簽的兩種方法
這篇文章主要介紹了Vue.js項(xiàng)目中管理每個頁面的頭部標(biāo)簽的兩種方法,需要的朋友可以參考下2018-06-06
vue 項(xiàng)目引入echarts 添加點(diǎn)擊事件操作
這篇文章主要介紹了vue 項(xiàng)目引入echarts 添加點(diǎn)擊事件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
vue+element下日期組件momentjs轉(zhuǎn)換賦值問題解決
這篇文章主要介紹了vue+element下日期組件momentjs轉(zhuǎn)換賦值問題,記錄下使用momentjs轉(zhuǎn)換日期字符串賦值給element的日期組件報錯問題,需要的朋友可以參考下2024-02-02
vue頁面中使用getElementsByClassName無法獲取元素的解決
這篇文章主要介紹了vue頁面中使用getElementsByClassName無法獲取元素的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

