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

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

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

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

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

?? 一、問題背景

在 Vue 3 項目中,常見需求是:

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

例如:

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

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

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

?? 二、問題演示

示例場景:

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

?問題本質(zhì):

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

? 三、正確解決方案

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

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 是判斷是否仍在當前頁面的推薦方式。

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

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

?? 六、進階封裝建議:自定義 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é)建議

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

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

?? 八、知識點補充

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

?? 結(jié)語

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

    這篇文章主要給大家介紹了關(guān)于vue3使用quill富文本編輯器保姆級教程的相關(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實現(xiàn)各種類型文件的預(yù)覽功能

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

    這篇文章主要介紹了如何在Vue3中使用aceEditor插件和vue-ipynb插件實現(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)讀(推薦),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • VUE 文字轉(zhuǎn)語音播放的實現(xiàn)示例

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

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

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

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

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

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

最新評論

通山县| 台前县| 濮阳市| 策勒县| 巴东县| 贵定县| 深水埗区| 乐至县| 中江县| 隆尧县| 惠安县| 小金县| 阳山县| 巴东县| 栖霞市| 瑞安市| 彭泽县| 禹州市| 巴林右旗| 大冶市| 阿拉善盟| 乌兰县| 兴海县| 普安县| 上高县| 莱州市| 丰台区| 溆浦县| 阳新县| 德阳市| 海南省| 遂川县| 常州市| 昭苏县| 武城县| 龙海市| 彭山县| 城步| 朝阳市| 玉树县| 沙河市|