BrowserRouter
履歴APIを使用します。つまり、レガシーブラウザ(IE 9以下および同時代のブラウザ)では使用できません。クライアント側のReactアプリケーションは、example.com / react / routeのようなクリーンなルートを維持できますが、Webサーバーによってバックアップされる必要があります。通常、これは、Webサーバーをシングルページアプリケーション用に構成する必要があることを意味します。つまり、同じことindex.html
が/ react / routeパスまたはサーバー側の他のルートにも提供されます。クライアント側でwindow.location.pathname
は、Reactルーターによって解析されます。Reactルーターは、/ react / route用にレンダリングするように構成されたコンポーネントをレンダリングします。
さらに、セットアップにはサーバー側のレンダリングindex.html
が含まれる場合があり、現在のルートに固有のレンダリングされたコンポーネントまたはデータが含まれる場合があります。
HashRouter
URLハッシュを使用し、サポートされているブラウザやWebサーバーに制限はありません。サーバー側のルーティングは、クライアント側のルーティングから独立しています。
下位互換性のあるシングルページアプリケーションは、example.com /#/ react / routeとして使用できます。サーバー側で提供される/パスであるため、サーバー側のレンダリングでセットアップをバックアップすることはできません。サーバー側から#/ react / routeURLハッシュを読み取ることはできません。クライアント側でwindow.location.hash
は、Reactルーターによって解析されます。Reactルーターは、と同様に、/ react / route用にレンダリングするように構成されたコンポーネントをレンダリングしますBrowserRouter
。
最も重要なのは、HashRouter
ユースケースがSPAに限定されないことです。Webサイトには、レガシーまたは検索エンジンに適したサーバー側ルーティングがある場合がありますが、Reactアプリケーションは、example.com / server / side / route#/ react / routeのようにURLでその状態を維持するウィジェットである場合があります。Reactアプリケーションを含む一部のページは、サーバー側で/ server / side / routeに提供され、クライアント側でReactルーターは、前のシナリオと同様に、/ react / route用にレンダリングするように構成されたコンポーネントをレンダリングします。