[Javascript] 前端路由

令人驚歎的前端路由原理解析和實現方式
https://cloud.tencent.com/developer/article/1528855

【第2194期】SPA 路由三部曲之核心原理

要實現前端路由,需要解決兩個核心問題:
1. 如何改變 URL 卻不引起頁面刷新?
2. 如何檢測 URL 變化了?

.hash 實現
1. hash 是 URL 中 hash (#) 及後面的那部分,常用作錨點在頁面內進行導航,改變 URL 中的 hash 部分不會引起頁面刷新
2. 通過 hashchange 事件監聽 URL 的變化,改變 URL 的方式只有這幾種:通過流覽器前進後退改變 URL、通過標籤改變 URL、通過window.location改變URL,這幾種情況改變 URL 都會觸發 hashchange 事件

.history 實現
1. history 提供了 pushState 和 replaceState 兩個方法,這兩個方法改變 URL 的 path 部分不會引起頁面刷新
2. history 提供類似 hashchange 事件的 popstate 事件,但 popstate 事件有些不同:通過流覽器前進後退改變 URL 時會觸發 popstate 事件,通過pushState/replaceState或標籤改變 URL 不會觸發 popstate 事件。好在我們可以攔截 pushState/replaceState的調用和標籤的點擊事件來檢測 URL 變化,所以監聽 URL 變化可以實現,只是沒有 hashchange 那麼方便。


#Javascript, router, hash, history, hashchange, pushState, replaceState, 前端, 路由

留言