Vue Router 4.0 正式發布!煥然一新。

關注若川視野,回復"pdf" 領取資料,回復"加群",可加群長期交流學習

12月8日,Vue Router 4 正式發布穩定版本。

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

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

項目結構優化

Vue Router 現在分為三個模塊:

  • History 實現:?處理地址欄,并且特定于 Vue Router 運行的環境(節點,瀏覽器,移動設備等)

  • Router 匹配器:處理類似?/users/:id?的路由解析和優先級處理。

  • Router: 將一切連接在一起,并處理路由特定功能,例如導航守衛。

動態路由

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

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

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

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

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

甚至專門有?Path Ranker[3]?這個網頁來幫助你計算路由的優先級得分。

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

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+'])
})

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

改進后的導航系統

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

更強大的 Devtools

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

  1. 時間軸記錄路由變化:

  1. 完整 route 目錄,能夠幫助你輕松進行調試:

更好的路由守衛

next說拜拜,現在確認跳轉不需要再手動執行這個函數了,而是根據你的返回值來決定行為。同樣支持異步返回 Promise。

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

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

一致的編碼

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

遷移成本低

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

展望未來

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

  • 使用現有工具(Vetur,Vite,Devtools 等)得到更好的開發體驗。

  • 與 Suspense 等現代功能更好地集成。

  • RFCs 和社區共同探討出更好用的 API。

  • 開發更輕型的版本。

試試看

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

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

發布地址: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]

動態路由: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

相關閱讀

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

推薦閱讀

知乎問答:一年內的前端看不懂前端框架源碼怎么辦?
我在阿里招前端,我該怎么幫你?(文末有福利)
如何拿下阿里巴巴 P6 的前端 Offer
如何準備阿里P6/P7前端面試--項目經歷準備篇
大廠面試官常問的亮點,該如何做出?
如何從初級到專家(P4-P7)打破成長瓶頸和有效突破
若川知乎問答:2年前端經驗,做的項目沒什么技術含量,怎么辦?

末尾

你好,我是若川,江湖人稱菜如若川,歷時一年只寫了一個學習源碼整體架構系列~(點擊藍字了解我)

  1. 關注若川視野,回復"pdf" 領取優質前端書籍pdf,回復"加群",可加群長期交流學習

  2. 我的博客地址:https://lxchuan12.gitee.io?歡迎收藏

  3. 覺得文章不錯,可以點個在看呀^_^另外歡迎留言交流~

小提醒:若川視野公眾號面試、源碼等文章合集在菜單欄中間【源碼精選】按鈕,歡迎點擊閱讀,也可以星標我的公眾號,便于查找

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276397.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實戰Nginx與PHP(FastCGI)的安裝、配置與優化

轉載鏈接:http://ixdba.blog.51cto.com/2895551/806622 一、什么是 FastCGI FastCGI是一個可伸縮地、高速地在HTTP server和動態腳本語言間通信的接口。多數流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同時,…

python在運維自動化的前景_現在學運維自動化python和大數據?

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":7,"count":7}]},"card":[{"des":"阿里云實時計算(Alibaba Cloud Realtime Com…

BOM算最尾階的損耗率 成品直接到料件

假設由B生產為A經過3道工序,各工序的損耗率分別為 C1,C2,C3; 由D生產為B經過1道工序,作業損耗率為C4. 請問在BOM中建立材料的損耗率應該是怎樣的呀? 我的理解是這樣:A的產出B的投入(1-C1)(1-C2)(1-C3)所以B的投入A的產出/(1-C1)(1-C2)(1-C3)所以建A的BOM時,材料B的損耗率為: …

10個前端8個用Vue的,怎么才能在面試中出彩?

大家好,我是若川。現在但凡出去面試,面試官幾乎必問 Vue3.0 。不僅會問一些核心特性,還會問原理層面的問題。比如:?框架層面問題:Vue3.0 新特性 Composition API 與 React.js 中 Hooks 的異同點??源碼、原…

ASP.NET MVC學習之(5):Html.ActionLink

本文整理了該方法的幾種重載形式: 一 Html.ActionLink("linkText","actionName") 該重載的第一個參數是該鏈接要顯示的文字,第二個參數是對應的控制器的方法,默認控制器為當前頁面的控制器,如果當前頁面的控制…

python qq模塊_常用的Python模塊

目錄1、使用copy模塊來復制>>> class Animal:def _init_(self, species, number_of_legs, color):self.species speciesself.number_of_legs number_of_legsself.color color>>> harry Animal()>>> harry._init_(hippogriff, 6, pink)>>&…

故鄉 | 登高望遠,夜幕降臨

歡迎星標我的公眾號若川視野,回復加群,長期交流學習上周末看了幾集豆瓣評分8.5分劉同同名小說的青春劇《我在未來等你》,讓我回想起自己的高中生活。也想起小時候經常爬到故鄉附近的小山,看夕陽西下。時常和同事開玩笑說&#xff…

CentOS5安裝Nginx1.4+PHP5.5 FastCGI

轉載鏈接:http://blog.csdn.net/staricqxyz/article/details/17012329 yum -y install gcc gcc-c autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2…

FTP服務器的搭建

IIS IIS所提供的FTP功能比較簡單: 用戶依賴于“操作系統用戶”;只提供了全局讀(瀏覽和復制)、寫(刪除、修改、添加)功能設置,也就是說所有的讀寫權限都相同;“用戶”與“對應目錄”的…

一份熱乎乎的滴滴前端面經

關注若川視野,回復"pdf" 領取資料,回復"加群",可加群長期交流學習滴滴前端實習面經滴滴是我投簡歷之后第二家面試的公司, 國慶節前兩三天投的簡歷, 國慶后復工第一天就給我打了電話約一面。那時候…

用webBrowser取源文件取不到的點擊數--選秀榜selectop.com網站內容管理系統之六

用idhttp可以取到源文件,但網站用腳本代碼,源文件是看不到,并且代碼的結果也取不出。webBrowser可以多次返回下載到的內容,不包括任何html語法,這個當中就有文章的點擊數。在WebBrowser1DownloadComplete事件中處理&am…

Nginx負載均衡配置

轉載鏈接:http://blog.csdn.net/staricqxyz/article/details/16984029 將域名指向Nginx服務器 訪問www.test.com會轉發到192.168.1.22,192.168.1.23 user nobody nobody; worker_processes 1; events { worker_connections 1024; } http { …

linux查看python環境變量_Linux中添加PYTHONPATH配置anaconda環境變量方法

因為最近開發多智能體模型需要把自己寫的環境打包import,環境是統一的,如果不加入環境變量,每次測一個算法都要把包作為附屬腳本和算法腳本放一起非常麻煩。所以就想把這些寫的環境加入到python的環境變量里,這樣就不用每次測試都…

yii_wiki_145_yii-cjuidialog-for-create-new-model (通過CJuiDialog來創建新的Model)

/**** CJuiDialog for create new model http://www.yiiframework.com/wiki/145/cjuidialog-for-create-new-model/translated by php攻城師http://blog.csdn.net/phpgcsIntroduction Scenario Preparation of the form Enhance the action create The dialog Summary ***/Intr…

真誠推薦幾個最值得關注的前端公眾號

前端技術日新月異,發展迅速,作為一個與時俱進的前端工程師,需要不斷的學習。這里強烈推薦幾個前端開發工程師必備的優質公眾號,希望對你有所幫助。大家可以像我一樣,利用碎片時間閱讀這些公眾號的文章。code秘密花園一…

Silverlight Unit Test Framework

微軟在08年的時候推出了一個Silverlight的單元測試框架,該框架在Mix 08的時候與Silverlight controls同時推出的,微軟工程師Jeff Wilcox一直參與維護該單元測試框架。Scott Gu對這個框架的介紹Jeff Wilcox提供的視頻介紹該框架的源代碼已經包括在Silverl…

Nginx 反向代理、負載均衡、頁面緩存、URL重寫及讀寫分離詳解

轉載鏈接:http://freeloda.blog.51cto.com/2033581/1288553 大綱 一、前言 二、環境準備 三、安裝與配置Nginx 四、Nginx之反向代理 五、Nginx之負載均衡 六、Nginx之頁面緩存 七、Nginx之URL重寫 八、Nginx之讀寫分離 注,操作系統為 CentOS 6.4 x86_64…

[Jobdu] 題目1499:項目安排

題目描述:小明每天都在開源社區上做項目,假設每天他都有很多項目可以選,其中每個項目都有一個開始時間和截止時間,假設做完每個項目后,拿到報酬都是不同的。由于小明馬上就要碩士畢業了,面臨著買房、買車、…

How to: Display a Gradient Fill

To display a gradient fill 第一步:In Visual Studio, create a Smart Device project. 第二部:Add the Gradientfill and GradientFilledButton classes to your project. public sealed class GradientFill{ // This method wraps the …

能在任意一種框架中復用的組件,太牛了!

Web Component 是一種 W3C標準支持的組件化方案,通過它可以編寫可復用的組件,同時也可以對自己的組件做更精細化的控制。更牛的是,Web Component 可以在任何一種框架中使用,不用加載任何模塊、代碼量小,優勢非常明顯&a…