最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue 3 中使用路由參數(shù)跳轉(zhuǎn)時(shí) watch 觸發(fā)重復(fù)請(qǐng)求問題解決

 更新時(shí)間:2025年07月07日 09:24:57   作者:JaysonJin  
Vue3中watch(route.query.id)可能因跨頁參數(shù)變化重復(fù)觸發(fā)請(qǐng)求,需通過路由name判斷當(dāng)前頁面,避免誤操作,route.query是響應(yīng)式,setup不重執(zhí)行,watch需手動(dòng)處理上下文,本文給大家介紹Vue 3 中使用路由參數(shù)跳轉(zhuǎn)時(shí) watch 觸發(fā)重復(fù)請(qǐng)求問題解決,感興趣的朋友一起看看吧

??Vue 3 中使用路由參數(shù)跳轉(zhuǎn)時(shí) watch 觸發(fā)重復(fù)請(qǐng)求問題詳解

掌握 Vue 3 路由參數(shù)監(jiān)聽中的隱藏陷阱,避免詳情頁、嵌套路由頁誤觸發(fā)重復(fù)請(qǐng)求!

?? 一、問題背景

在 Vue 3 項(xiàng)目中,常見需求是:

  • 列表頁點(diǎn)擊跳轉(zhuǎn)到詳情頁,傳遞 id 參數(shù)
  • 詳情頁通過 watch(() => route.query.id) 監(jiān)聽路由變化,自動(dòng)請(qǐng)求數(shù)據(jù)

例如:

watch(() => route.query.id, (newId) => {
  fetchDetail(newId)
})

?? 看似合理,但如果你在詳情頁內(nèi)點(diǎn)擊跳轉(zhuǎn)其他頁面(如訂單詳情頁),此 watch 也會(huì)執(zhí)行,可能導(dǎo)致:

  • ? 重復(fù)發(fā)起請(qǐng)求
  • ? 未更新界面但數(shù)據(jù)已重新加載
  • ? 性能浪費(fèi)與閃爍問題

?? 二、問題演示

示例場(chǎng)景:

  • 當(dāng)前在 /performance/detail?id=1001
  • 頁面中點(diǎn)擊跳轉(zhuǎn)訂單詳情頁 /order/detail?id=123456
  • 此時(shí)路由 query.id 發(fā)生變化,watch(() => route.query.id) 被觸發(fā)
  • 結(jié)果是:getList() 又執(zhí)行了一次

?問題本質(zhì):

watch(() => route.query.id, (newId) => {
  getList() // 此時(shí)其實(shí)已跳轉(zhuǎn)出當(dāng)前詳情頁了!
})

? 三、正確解決方案

? 核心思路:監(jiān)聽時(shí)加“當(dāng)前頁面判斷”

watch(() => route.query.id, (newId) => {
  if (route.name !== 'PerformanceDetail') return // ?? 頁面已跳轉(zhuǎn),不處理
  if (newId && newId !== userId.value) {
    userId.value = newId
    queryParams.value.userId = newId
    getList() // ? 安全觸發(fā)
  }
})

?? 四、配合路由 name 使用

你需要在路由配置中設(shè)置 name

{
  path: '/performance/detail',
  name: 'PerformanceDetail',
  component: () => import('@/views/PerformanceDetail.vue')
}

路由中使用 route.name 是判斷是否仍在當(dāng)前頁面的推薦方式。

?? 五、完整封裝模板(推薦復(fù)制使用)

import { watch } from 'vue'
import { useRoute } from 'vue-router'
const route = useRoute()
watch(() => route.query.id, (newId) => {
  if (route.name !== 'YourPageName') return  // 避免跳出當(dāng)前頁還觸發(fā)請(qǐng)求
  if (!newId || newId === currentId.value) return
  currentId.value = newId
  fetchData(newId)
})

?? 六、進(jìn)階封裝建議:自定義 Hook

你還可以封裝為通用函數(shù):

function useQueryParamWatcher(key, callback, routeName) {
  const route = useRoute()
  watch(() => route.query[key], (val) => {
    if (route.name !== routeName) return
    callback(val)
  }, { immediate: true })
}

使用:

useQueryParamWatcher('id', fetchData, 'PerformanceDetail')

? 七、總結(jié)建議

場(chǎng)景是否觸發(fā) watch
當(dāng)前詳情頁中更換 id? 應(yīng)觸發(fā)
從詳情頁跳轉(zhuǎn)訂單頁? 不應(yīng)觸發(fā)
瀏覽器返回回到詳情頁? 應(yīng)觸發(fā)
從其他模塊進(jìn)入此頁? 應(yīng)觸發(fā)

?? 不判斷路由名稱,watch 很容易被“跨頁參數(shù)變動(dòng)”誤觸發(fā)!

?? 八、知識(shí)點(diǎn)補(bǔ)充

  • route.query.id 是響應(yīng)式的,變化即觸發(fā) watch
  • Vue Router 的 query 和 params 都是響應(yīng)式
  • 路由跳轉(zhuǎn)過程中,setup 并不會(huì)重新執(zhí)行,watch 需要手動(dòng)判斷上下文

?? 結(jié)語

通過本文你應(yīng)掌握:

? 為什么 watch(route.query.id) 會(huì)重復(fù)觸發(fā)
? 如何判斷是否仍在當(dāng)前頁面
? 如何使用 route.name 做頁面隔離
? 如何避免離開時(shí)誤請(qǐng)求、重復(fù)請(qǐng)求

到此這篇關(guān)于Vue 3 中使用路由參數(shù)跳轉(zhuǎn)時(shí) watch 觸發(fā)重復(fù)請(qǐng)求問題解決的文章就介紹到這了,更多相關(guān)vue watch 觸發(fā)重復(fù)請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue如何通過日期篩選數(shù)據(jù)

    vue如何通過日期篩選數(shù)據(jù)

    這篇文章主要介紹了vue如何通過日期篩選數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue.js實(shí)現(xiàn)可排序的表格組件功能示例

    Vue.js實(shí)現(xiàn)可排序的表格組件功能示例

    這篇文章主要介紹了Vue.js實(shí)現(xiàn)可排序的表格組件功能,涉及vue.js事件響應(yīng)、元素動(dòng)態(tài)操作、排序、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • vue 組件基礎(chǔ)知識(shí)總結(jié)

    vue 組件基礎(chǔ)知識(shí)總結(jié)

    這篇文章主要介紹了vue 組件基礎(chǔ)知識(shí)的相關(guān)資料,幫助大家更好的理解和使用vue的組件,感興趣的朋友可以了解下
    2021-01-01
  • vue3使用quill富文本編輯器保姆級(jí)教程(附踩坑解決)

    vue3使用quill富文本編輯器保姆級(jí)教程(附踩坑解決)

    這篇文章主要給大家介紹了關(guān)于vue3使用quill富文本編輯器保姆級(jí)教程的相關(guān)資料,在許多網(wǎng)站和應(yīng)用程序中富文本編輯器是一種常見的工具,它使用戶能夠以直觀的方式創(chuàng)建和編輯文本內(nèi)容,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于Vue的 watch、computed和methods的區(qū)別匯總

    關(guān)于Vue的 watch、computed和methods的區(qū)別匯總

    這篇文章主要介紹關(guān)于Vue的 watch、computed和methods的區(qū)別,下面文章將圍繞Vue的 watch、computed和methods的續(xù)航管資料展開全文它們之間區(qū)別的內(nèi)容,需要的朋友可以參考一下,希望能幫助到大家
    2021-11-11
  • Vue實(shí)現(xiàn)各種類型文件的預(yù)覽功能

    Vue實(shí)現(xiàn)各種類型文件的預(yù)覽功能

    這篇文章主要介紹了如何在Vue3中使用aceEditor插件和vue-ipynb插件實(shí)現(xiàn)不同類型的文件預(yù)覽,包括txt、md、json、pkl、mps、py、ipynb、doc、docx、pdf、xlsx、csv等文件,需要的朋友可以參考下
    2025-03-03
  • Vue3 源碼導(dǎo)讀(推薦)

    Vue3 源碼導(dǎo)讀(推薦)

    這篇文章主要介紹了Vue3 源碼導(dǎo)讀(推薦),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • VUE 文字轉(zhuǎn)語音播放的實(shí)現(xiàn)示例

    VUE 文字轉(zhuǎn)語音播放的實(shí)現(xiàn)示例

    本文主要介紹了VUE 文字轉(zhuǎn)語音播放的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Element?plus中el-input框回車觸發(fā)頁面刷新問題以及解決辦法

    Element?plus中el-input框回車觸發(fā)頁面刷新問題以及解決辦法

    在el-form表單組件中el-input組件輸入內(nèi)容后按下Enter鍵刷新了整個(gè)頁面,下面這篇文章主要給大家介紹了關(guān)于Element?plus中el-input框回車觸發(fā)頁面刷新問題以及解決辦法,需要的朋友可以參考下
    2024-03-03
  • 微信小程序用戶盒子、宮格列表的實(shí)現(xiàn)

    微信小程序用戶盒子、宮格列表的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序用戶盒子、宮格列表,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

肥东县| 朔州市| 板桥市| 乐平市| 澄迈县| 潜山县| 济南市| 绩溪县| 锡林郭勒盟| 康平县| 宽城| 探索| 马公市| 江安县| 柘城县| 金乡县| 临高县| 汪清县| 临漳县| 西乡县| 皮山县| 牟定县| 南投市| 胶州市| 安庆市| 河间市| 土默特左旗| 台前县| 红桥区| 普宁市| 南平市| 邻水| 高平市| 息烽县| 汉沽区| 佛冈县| 交口县| 诸城市| 镇远县| 航空| 临夏县|