客户端路由(CSR)原理

传统浏览器导航行为就是URL改变时直接向服务器发送请求,服务器响应对应资源,而客户端路由就是URL改变时不再发送请求,而是由客户端部署的App自行匹配URL并展示对应内容。

remix/history (v5.3)是react-router实现CSR的核心库,其中CSR分为两种:

  1. URL Hash
  2. Browser History

编码式导航:二者都是通过history.pushState/replaceState改变URL而不触发请求,只不过Hash路由中传递URL Hash,Browser history路由中传递URL;

浏览器交互式导航(如back、forward或手动输入URL):浏览器发起的导航通过popstate, hashchange事件来监听,进而触发所有listener,具体如下:

  1. Hash:通过popstate事件来监听URL Hash变化,由于IE11中URL Hash改变不会触发popstate事件,所以也会监听hashchange事件;
  2. Browser history:通过popstate事件来监听URL变化;

react-router v6新增<RouterProvider>组件,该组件订阅了URL的改变,URL改变时更新react state,触发app的重新渲染;

react-router v5路由嵌套原理

Route是对RouterContext.ConsumerRouterContext.Provider的封装,该组件会获取最近的RouterContext.Provider的context value,并创建新的RouterContext.Provider,以便子路由获取其context value,这就实现了路由嵌套。