<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Vue Router 4.0 正式發(fā)布!煥然一新。

          共 3275字,需瀏覽 7分鐘

           ·

          2020-12-12 11:43

          今天,Vue Router 4 正式發(fā)布穩(wěn)定版本。

          在經(jīng)歷了 14 個 Alpha,13 個 Beta 和 6 個 RC 版本之后,Vue Router v4 閃亮登場,為你帶來了 TypeScript 集成、新功能以及對現(xiàn)代應(yīng)用程序的一致性改進,已經(jīng)準備好成為 Vue3 新應(yīng)用的最佳伴侶。

          將近 2 年的時間,大約 1500 次提交,15 個RFC[1],無數(shù)的心血……以及許多用戶的幫助以及他們的錯誤報告和功能請求。?謝謝大家的幫助!

          項目結(jié)構(gòu)優(yōu)化

          Vue Router 現(xiàn)在分為三個模塊:

          • History 實現(xiàn):?處理地址欄,并且特定于 Vue Router 運行的環(huán)境(節(jié)點,瀏覽器,移動設(shè)備等)
          • Router 匹配器:處理類似?/users/:id?的路由解析和優(yōu)先級處理
          • Router: 將一切連接在一起,并處理路由特定功能,例如導(dǎo)航守衛(wèi)。

          動態(tài)路由

          動態(tài)路由[2]是 Vue Router 最受歡迎的功能之一。?它讓路由變得更靈活,更強大,讓曾經(jīng)不可能的功能成為了現(xiàn)實!Vue Router4 新增了有自動優(yōu)先級排名的高級路徑解析功能,用戶新現(xiàn)在可以以隨意的順序定義路由,因為 Router 會根據(jù) URL 字符串表示來猜測應(yīng)該匹配的路由。

          優(yōu)先級排名,其實就是根據(jù)你路徑書寫的規(guī)則計算出一個得分,根據(jù)得分來優(yōu)先選用最有可能的那一項。

          舉個例子來說,你同時寫了?/users?和?/:w+?這兩個路由:

          const?routes?=?[
          ??{
          ????path:?'/users',
          ????Component:?Users
          ??},
          ??{
          ????path:?'/:w+',
          ????Component:?NotFound
          ??}
          ]

          那么你當然希望在輸入?/users?這個更精確的路徑的時候,走上面的規(guī)則,而下面則作為兜底規(guī)則。在舊版的 Vue Router 中需要通過路由聲明的順序來保證這個行為,而新版則無論你怎樣放置,都會按照得分系統(tǒng)來計算該匹配哪個路由。

          甚至專門有?Path Ranker[3]?這個網(wǎng)頁來幫助你計算路由的優(yōu)先級得分。

          在測試用例中,ssh 找到了一個更具體的優(yōu)先級得分排名,可以先感受一下:

          it('works',?()?=>?{
          ??checkPathOrder([
          ????'/a/b/c',
          ????'/a/b',
          ????'/a/:b/c',
          ????'/a/:b',
          ????'/a',
          ????'/a-:b-:c',
          ????'/a-:b',
          ????'/a-:w(.*)',
          ????'/:a-:b-:c',
          ????'/:a-:b',
          ????'/:a-:b(.*)',
          ????'/:a/-:b',
          ????'/:a/:b',
          ????'/:w',
          ????'/:w+'
          ??])
          })

          簡單來說,越明確的路由排名越高,越模糊則反之,無關(guān)順序,非常有意思。

          改進后的導(dǎo)航系統(tǒng)

          新的導(dǎo)航系統(tǒng)更加具有一致性,它改善了滾動行為的體驗,使其更加接近原生瀏覽器的行為。?它還為用戶提供了有關(guān)導(dǎo)航狀態(tài)的幾乎更多信息,用戶可以用這些信息,通過?ProgressBar和?Modal之類的全局 UI 元素讓用戶的體驗變得更好。

          更強大的 Devtools

          多虧了新的Vue Devtools[4],Vue Router 能夠和瀏覽器進行以下更高級的整合。

          1. 時間軸記錄路由變化:
          1. 完整 route 目錄,能夠幫助你輕松進行調(diào)試:

          更好的路由守衛(wèi)

          next說拜拜,現(xiàn)在確認跳轉(zhuǎn)不需要再手動執(zhí)行這個函數(shù)了,而是根據(jù)你的返回值來決定行為。同樣支持異步返回 Promise。

          現(xiàn)在的路由守衛(wèi) API 更加友好且合理了,可以完美利用?async await?做異步處理,比如這樣:

          router.beforeEach(async?(to,?from)?=>?{
          ??//?canUserAccess()?returns?`true`?or?`false`
          ??return?await?canUserAccess(to)
          })

          一致的編碼

          編碼方式(Encoding)做了統(tǒng)一的適配,現(xiàn)在將在不同的瀏覽器和路由位置屬性(params,?query?和?hash)中保持一致。?作為參數(shù)傳遞給?router.push()?時,不需要做任何編碼,在你使用?$route?或?useRoute()去拿到參數(shù)的時候永遠是解碼(Decoded)的狀態(tài)。

          遷移成本低

          Vue Router 4 主要致力于于在改善現(xiàn)有 Router 的同時保持非常相似的 API,如果你已經(jīng)很上手舊版的 Vue Router 了,那你的遷移會做的很順利,可以查看文檔中的完整遷移指南[5]

          展望未來

          在過去的幾個月中,Vue Router 一直穩(wěn)定而且好用,現(xiàn)在它可以做些更好玩的事兒了:

          • 使用現(xiàn)有工具(Vetur,Vite,Devtools 等)得到更好的開發(fā)體驗。
          • 與 Suspense 等現(xiàn)代功能更好地集成。
          • RFCs 和社區(qū)共同探討出更好用的 API。
          • 開發(fā)更輕型的版本。

          試試看

          等不及想試試 Vue Router 4 了?這里有CodeSandbox[6],還有集成好 Tailwind CSS 的 Vite 模板[7],或使用CLI[8]來開始你的游玩。

          想學(xué)習 Vue Router 4 的更多先進理念了?請立刻查看我們的新文檔[9]。?如果您是現(xiàn)有的 Vue 2.x 用戶,請直接轉(zhuǎn)到遷移指南[10]

          發(fā)布地址:https://github.com/vuejs/vue-router-next/releases/tag/v4.0.0

          參考資料

          [1]

          RFC:https://github.com/vuejs/rfcs/pulls?q=is%3Apr+sort%3Aupdated-desc+label%3Arouter+is%3Aclosed

          [2]

          動態(tài)路由:https://next.router.vuejs.org/guide/advanced/dynamic-routing.html

          [3]

          Path Ranker:https://paths.esm.dev/?p=AAMeJVyBwRkJTALagIAOuGrgACU.#

          [4]

          Vue Devtools:https://chrome.google.com/webstore/detail/vuejs-devtools/ljjemllljcmogpfapbkkighbhhppjdbg

          [5]

          完整遷移指南:https://next.router.vuejs.org/guide/migration/index.html

          [6]

          CodeSandbox:https://codesandbox.io/s/vue-router-4-reproduction-hb9lh

          [7]

          集成好 Tailwind CSS 的 Vite 模板:https://vite-tailwind.esm.dev/about

          [8]

          CLI:https://cli.vuejs.org/

          [9]

          新文檔:https://next.router.vuejs.org/

          [10]

          遷移指南:https://next.router.vuejs.org/guide/migration/index.html#breaking-changes


          相關(guān)閱讀

          深入揭秘前端路由本質(zhì),手寫 mini-router

          感謝大家

          1.如果覺得這篇文章還不錯,來個分享、點贊、在看三連吧,這是我創(chuàng)作最大的動力~

          2.關(guān)注「前端從進階到入院」,獲取我分類整理的自己全網(wǎng) 100w+ 閱讀的精選原創(chuàng)面試熱點文章,我進入字節(jié)、滴滴、百度的小伙伴們說文章中的很多內(nèi)容對面試幫助很大,希望也能幫助到你。

          3. 關(guān)注后加我好友,希望能和大家交個朋友。


          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一级免费看精品 | 亚洲高清超级无码在线视频观看 | 一二三区| 91在线观看视频 | 最近中文字幕完整视频高清1最近中文 |