vue中pinia數(shù)據(jù)一直重復(fù)獲取之前的值的解決方法
概要
如果想讓pinia數(shù)據(jù)不會重復(fù)獲取之前的值需要手動強制觸發(fā) Pinia store 的狀態(tài)更新。
場景描述
有個業(yè)務(wù)如果token有效期失效需要重新跳轉(zhuǎn)到login頁面。
技術(shù)細(xì)節(jié)
不進行手動刷新
路由守衛(wèi)
router.beforeEach( async(to: any, from: any, next: any) =>{ let userStore = useUserStore() let token = userStore.token; if(token){ try { // token有效期驗證(能訪問表示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") }
實現(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項目中管理每個頁面的頭部標(biāo)簽的兩種方法
這篇文章主要介紹了Vue.js項目中管理每個頁面的頭部標(biāo)簽的兩種方法,需要的朋友可以參考下2018-06-06vue+element下日期組件momentjs轉(zhuǎn)換賦值問題解決
這篇文章主要介紹了vue+element下日期組件momentjs轉(zhuǎn)換賦值問題,記錄下使用momentjs轉(zhuǎn)換日期字符串賦值給element的日期組件報錯問題,需要的朋友可以參考下2024-02-02vue頁面中使用getElementsByClassName無法獲取元素的解決
這篇文章主要介紹了vue頁面中使用getElementsByClassName無法獲取元素的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03