Vue3如何解決路由緩存問(wèn)題(響應(yīng)路由參數(shù)的變化)
官方文檔解釋?zhuān)?/strong>
解決問(wèn)題的思路:
- 讓組件實(shí)例不復(fù)用,強(qiáng)制銷(xiāo)毀重建
- 監(jiān)聽(tīng)路由變化,變化之后執(zhí)行數(shù)據(jù)更新操作
方案一:給router-view添加key
以當(dāng)前路由完整路徑為key 的值,給router-view組件綁定
<RouterView :key="$route.fullPath" />
所以添加 key之后會(huì)強(qiáng)制替換組件,重新發(fā)送所有請(qǐng)求(某些情況下不需要重新發(fā)送所有請(qǐng)求,會(huì)造成性能浪費(fèi)),而非復(fù)用。
方案二:使用 beforeRouteUpdate 導(dǎo)航鉤子
beforeRouteUpdate 鉤子函數(shù)可以在每次路由更新之前執(zhí)行,在回調(diào)中執(zhí)行需要數(shù)據(jù)更新的業(yè)務(wù)邏輯即可。
這里只需要 getCategory 重新請(qǐng)求,而 getBanner 不重新請(qǐng)求。
注意點(diǎn):
- 這里 id 會(huì)變化,不傳入則使用 默認(rèn)id,使用 to 的目的在于獲取將要到達(dá)路由的 params參數(shù)。
- 又因?yàn)?onBeforeRouteUpdate 是在跳轉(zhuǎn)之前就執(zhí)行的鉤子,所以只能通過(guò) to 來(lái)獲取即將到達(dá)的路由的參數(shù)。
const getCategory = async (id = route.params.id) => { const res = await getCategoryAPI(id) categoryData.value = res.result } const getBanner = async () => { const res = await getBannerAPI({ distributionSite: '2' }) bannerList.value = res.result } onMounted(() => { getCategory() getBanner() }) // 路由參數(shù)變化的時(shí)候,可以把分類(lèi)數(shù)據(jù)接口重新發(fā)送 onBeforeRouteUpdate((to)=> { getCategory(to.params.id) })
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vite+vue3+tsx項(xiàng)目打包后動(dòng)態(tài)路由無(wú)法加載頁(yè)面的問(wèn)題及解決
- vue3輸入無(wú)效路由跳轉(zhuǎn)到指定error頁(yè)面問(wèn)題
- vue3實(shí)現(xiàn)動(dòng)態(tài)路由及菜單
- vue3頁(yè)面組件中怎么獲取上一個(gè)頁(yè)面的路由地址
- vue3編譯報(bào)錯(cuò)ESLint:defineProps is not defined no-undef的問(wèn)題
- vue3父組件異步props傳值子組件接收不到值問(wèn)題解決辦法
- 解決vue3報(bào)錯(cuò):Unexpected?mutation?of?“xxx“?prop.(eslintvue/no-mutating-props)
- Vue3中關(guān)于路由規(guī)則的props配置方式
相關(guān)文章
vue3中emit('update:modelValue')使用簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于vue3中emit('update:modelValue')使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-09-09Vue結(jié)合leaflet實(shí)現(xiàn)克里金插值
本文主要介紹了Vue結(jié)合leaflet實(shí)現(xiàn)克里金插值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06深入學(xué)習(xí)Vue nextTick的用法及原理
這篇文章主要介紹了深入學(xué)習(xí)Vue nextTick的用法及原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10vue項(xiàng)目引入遠(yuǎn)程jweixin-1.2.0.js文件并使用詳解
這篇文章主要介紹了vue項(xiàng)目引入遠(yuǎn)程jweixin-1.2.0.js文件并使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03利用Vue+intro.js實(shí)現(xiàn)頁(yè)面新手引導(dǎo)流程功能
在同學(xué)們使用某些網(wǎng)站的新版本頁(yè)面的時(shí)候,經(jīng)常會(huì)出現(xiàn)一個(gè)類(lèi)似于新手引導(dǎo)一樣的效果,來(lái)幫助同學(xué)們更好的熟悉新版本頁(yè)面的功能和使用,這篇文章主要給大家介紹了關(guān)于如何利用Vue+intro.js實(shí)現(xiàn)頁(yè)面新手引導(dǎo)流程功能的相關(guān)資料,需要的朋友可以參考下2023-11-11vue.js將時(shí)間戳轉(zhuǎn)化為日期格式的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue.js將時(shí)間戳轉(zhuǎn)化為日期格式的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06vue3實(shí)現(xiàn)模擬地圖站點(diǎn)名稱(chēng)按需顯示的功能(車(chē)輛模擬地圖)
最近在做車(chē)輛模擬地圖,在實(shí)現(xiàn)控制站點(diǎn)名稱(chēng)按需顯示,下面通過(guò)本文給大家分享vue3實(shí)現(xiàn)模擬地圖站點(diǎn)名稱(chēng)按需顯示的功能,感興趣的朋友跟隨小編一起看看吧2024-06-06淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過(guò)v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡(jiǎn)化父子組件雙向綁定,需要的朋友可以參考下2022-12-12Vue前端書(shū)寫(xiě)規(guī)范大全(非常詳細(xì)!)
在團(tuán)體開(kāi)發(fā)項(xiàng)目中,為了團(tuán)隊(duì)所有成員書(shū)寫(xiě)可維護(hù)的代碼,而不是一次性的代碼,讓團(tuán)隊(duì)當(dāng)中其他人看你的代碼能一目了然,下面這篇文章主要給大家介紹了關(guān)于Vue前端書(shū)寫(xiě)規(guī)范的相關(guān)資料,需要的朋友可以參考下2023-01-01