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

vue3不能使用history.pushState修改url參數(shù)踩坑

 更新時間:2023年02月08日 14:08:01   作者:馬格納斯  
這篇文章主要為大家介紹了vue3不能使用history.pushState修改url參數(shù)踩坑解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

在重構(gòu)我的 vue-use-sync-url(輔助將數(shù)據(jù)和 url 參數(shù)進行同步的工具庫)時,遇到了一個使用 window.history.pushState 來修改地址欄的 url 參數(shù)的 bug,準確來說是 vue-router 的 bug,下面就來講講具體是怎么回事。

問題

場景如下,有一個輸入框里面輸入了內(nèi)容,點擊搜索按鈕使用 window.history.pushState 將數(shù)據(jù)同步到 url 參數(shù)上。然后再點擊 go about 按鈕跳轉(zhuǎn)到別的頁面,關(guān)鍵的來了,這時候你點擊瀏覽器左上角的回退按鈕回到剛才的頁面,url 上的 keywords 參數(shù)變沒了! 這里上個測試鏈接 codesandbox

<script setup>
import { ref } from "vue";
const keywords = ref("123")
const handleClick = () => {
  window.history.pushState({}, "", `${window.location.pathname}?keywords=${keywords.value}`)
}
</script>
<template>
  <input v-model="keywords" />
  <button @click="handleClick">搜索</button>
  <router-link to="/about">go about</router-link>
</template>

追根溯源

一開始想是不是我寫的有問題?測試了 vue2-routerreact-router 都沒有這個問題,所以我就將問題鎖定在了 vue3-router 了。因為 router-link 和直接執(zhí)行了 router.push 操作是一樣的,所以我就去找 push 操作所在的源碼位置,最終在 packages/router/src/history/html5.ts 中找到了如下代碼。

可以看到在這個 push 函數(shù)中,在第 288 行,執(zhí)行了一次 replace 的操作,而在第 297 行才是真正的 push 操作。我將第 288 行注釋之后,上面的 demo 就跑通了,但是直覺告訴我它這里這么做是有原因的,但是想弄明白估計得將整個庫的源碼看完,沒有這個精力。直接提了個 issue,在它的 github issue 中我發(fā)現(xiàn)了好幾個由于這個第 288 行代碼產(chǎn)生的問題,例如 #1416#1526、#1529。維護者在我的 issue 中是這么回答的。

結(jié)合他在其它 issue 中的回答,大概是如下這么個意思。直接使用 history api,路由器是不知道的,應(yīng)該避免使用,最好使用 router.push 來進行更改。還說到第 288 行對于更新當前歷史記錄條目是必要的,以便能夠通過導航守衛(wèi)取消ui 發(fā)起的導航。它允許知道導航的方向和在歷史堆棧中的相對位置。不幸的是,目前還沒有其他方法可以做到這一點。

我補充道,在 vue2react 中沒有這個問題,你不覺得這是個 bug 嗎?他說在 vue2 中使用 hisotry api 可能會產(chǎn)生你沒有遇到過的問題,vue-routervue3 中比 vue2 擁有更多的功能等等。

解決

沒辦法,維護者不覺得這是個 bug,最后只能妥協(xié)使用 router.push 來解決,并將 vue-router 的依賴添加到 peerDependencies 中。在一些場景下,如果想封裝一個庫在各個框架中共同使用就不行了,在這里必須使用 router.push 才可以,我覺得還是不太好的。

以上就是vue3不能使用history.pushState修改url參數(shù)踩坑的詳細內(nèi)容,更多關(guān)于vue3修改url參數(shù)踩坑的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 前端使用print.js實現(xiàn)打印功能(基于vue)

    前端使用print.js實現(xiàn)打印功能(基于vue)

    最近新接了一個需求,想要在前端實現(xiàn)打印功能,下面這篇文章主要給大家介紹了關(guān)于前端使用print.js實現(xiàn)打印功能(基于vue)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 總結(jié)4個方面優(yōu)化Vue項目

    總結(jié)4個方面優(yōu)化Vue項目

    在本篇文章里我們給大家整理了一篇關(guān)于優(yōu)化VUE項目的四個總要點,對此有需要的朋友們學習下天。
    2019-02-02
  • vue3.0列表頁面做緩存的方法代碼

    vue3.0列表頁面做緩存的方法代碼

    很多時候為了讓提高用戶的體驗感,在頁面上添加緩存,是十分有必要的,?下面這篇文章主要給大家介紹了關(guān)于vue3.0列表頁面做緩存的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Vue+echart?展示后端獲取的數(shù)據(jù)實現(xiàn)

    Vue+echart?展示后端獲取的數(shù)據(jù)實現(xiàn)

    本文主要介紹了Vue+echart?展示后端獲取的數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 使用Vue與WebSocket創(chuàng)建實時通知系統(tǒng)

    使用Vue與WebSocket創(chuàng)建實時通知系統(tǒng)

    在現(xiàn)代應(yīng)用開發(fā)中,實時性已成為用戶體驗的一個重要組成部分,ue 作為一款流行的前端框架,配合 WebSocket,可以輕松構(gòu)建實時通知系統(tǒng),在本文中,我們將通過一個簡單的示例,使用 Vue 3 的 Composition API(setup 語法糖)來創(chuàng)建一個實時通知系統(tǒng)
    2024-11-11
  • vue3中虛擬dom的介紹與使用詳解

    vue3中虛擬dom的介紹與使用詳解

    Vue?是如何將一份模板轉(zhuǎn)換為真實的?DOM?節(jié)點的,又是如何高效地更新這些節(jié)點的呢,這些都離不開虛擬dom這個概念,下面我們就來了解下虛擬dom這個概念以及它是什么吧
    2024-01-01
  • Vue AST源碼解析第一篇

    Vue AST源碼解析第一篇

    這篇文章主要為大家詳細介紹了Vue AST源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vant的Tabbar標簽欄引入自定義圖標方式

    Vant的Tabbar標簽欄引入自定義圖標方式

    這篇文章主要介紹了Vant的Tabbar標簽欄引入自定義圖標方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 在vue中使用echarts的方法以及可能遇到的問題

    在vue中使用echarts的方法以及可能遇到的問題

    Echarts是一個與框架無關(guān)的JS圖表庫,但是它基于Js,這樣很多框架都能使用它,下面這篇文章主要給大家介紹了關(guān)于在vue中使用echarts的方法以及可能遇到的問題的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue 對axios get pust put delete封裝的實例代碼

    vue 對axios get pust put delete封裝的實例代碼

    在本篇文章里我們給各位整理的是一篇關(guān)于vue 對axios get pust put delete封裝的實例代碼內(nèi)容,有需要的朋友們可以參考下。
    2020-01-01

最新評論

图片| 息烽县| 淳安县| 莎车县| 新平| 岢岚县| 顺昌县| 赤水市| 洛阳市| 龙门县| 修水县| 福州市| 郸城县| 拉萨市| 新余市| 务川| 浑源县| 西乌| 上蔡县| 怀远县| 琼结县| 五家渠市| 兰溪市| 富平县| 台中县| 新巴尔虎左旗| 商都县| 奉节县| 连城县| 滁州市| 旬邑县| 泸溪县| 定襄县| 武威市| 绥滨县| 文山县| 阳新县| 武乡县| 新河县| 高雄县| 崇左市|