客户端路由(CSR)原理
传统浏览器导航行为就是URL改变时直接向服务器发送请求,服务器响应对应资源,而客户端路由就是URL改变时不再发送请求,而是由客户端部署的App自行匹配URL并展示对应内容。
remix/history (v5.3)是react-router实现CSR的核心库,其中CSR分为两种:
- URL Hash
- Browser History
编码式导航:二者都是通过history.pushState/replaceState改变URL而不触发请求,只不过Hash路由中传递URL Hash,Browser history路由中传递URL;
浏览器交互式导航(如back、forward或手动输入URL):浏览器发起的导航通过popstate, hashchange
事件来监听,进而触发所有listener,具体如下:
- Hash:通过popstate事件来监听URL Hash变化,由于IE11中URL Hash改变不会触发popstate事件,所以也会监听hashchange事件;
- Browser history:通过popstate事件来监听URL变化;
react-router v6新增<RouterProvider>
组件,该组件订阅了URL的改变,URL改变时更新react state,触发app的重新渲染;
react-router v5路由嵌套原理
Route
是对RouterContext.Consumer
与RouterContext.Provider
的封装,该组件会获取最近的RouterContext.Provider
的context value,并创建新的RouterContext.Provider
,以便子路由获取其context value,这就实现了路由嵌套。