[解決済み] ReactのHashRouterとBrowserRouterの違いは何ですか?
質問
私はプログラミングの初心者なので、公式のドキュメントを読んでも少し理解しにくいところがあります。
について読んでいたのですが React Router 4はこちらから
この記事の中で、著者が話していたのは
<HashRouter>
と
<BrowserRouter>
ということをおっしゃっていました。
HashRouter は、基本的にURLのハッシュを使用してコンポーネントをレンダリングします。私は静的な1ページのウェブサイトを構築していたので、これを使用する必要がありました。
ブラウザルーター このコンポーネントは、HTML5 の履歴 API を使用してレンダリングされます。履歴はpushStateとreplaceStateによって変更することができます。詳しくはこちらをご覧ください。
さて、私はこの2つの意義とユースケースが理解できません。 履歴はpushStateとreplaceStateで変更可能です。 と コンポーネントをレンダリングするために、URLのハッシュを使用します。
BrowserRouterの最初の説明は全く曖昧ですが、HashRouterの2番目の説明も意味不明です。なぜ誰かがコンポーネントをレンダリングするためにurlにハッシュ(#)を使うのでしょうか?
解決方法は?
BrowserRouter
を使用しています。
履歴API
レガシーブラウザー(IE9以下と同世代)では使用できません。クライアント側のReactアプリケーションは、以下のようなきれいなルートを維持することができます。
example.com/react/route
が、Webサーバーのバックアップが必要です。通常、このことは、ウェブサーバーが単一ページのアプリケーション用に設定されていることを意味します。
index.html
は
/リアクト/ルート
パス、またはサーバー側の他のルート。クライアント側では
window.location.pathname
はReactルータで解析されます。React ルーターは、レンダリングするように設定されたコンポーネントをレンダリングします。
/react/route
.
さらに、設定にはサーバーサイドレンダリングが含まれる場合があります。
index.html
には、現在のルートに固有のレンダリングコンポーネントまたはデータが含まれることがあります。
HashRouter
URLハッシュを使用するため、対応ブラウザやウェブサーバに制限がありません。サーバーサイドのルーティングはクライアントサイドのルーティングから独立しています。
後方互換性のある単一ページ・アプリケーションは、以下のように使用できます。
example.com/#/react/route
. この設定は、サーバーサイドレンダリングでバックアップすることができないので
/
のパスがサーバーサイドで提供されます。
#/react/route
URLハッシュはサーバ側からは読み込めません。クライアント側では
window.location.hash
はReactルータで解析されます。React ルーターは、レンダリングするように設定されたコンポーネントをレンダリングします。
/react/route
と同じように
BrowserRouter
.
最も重要なことです。
HashRouter
の使用例は、SPAに限ったことではありません。ウェブサイトは、レガシーまたは検索エンジンに適したサーバーサイドのルーティングを持つかもしれませんし、Reactアプリケーションは、URLでその状態を維持するウィジェットかもしれません
example.com/server/side/route#/react/route
. React アプリケーションを含むいくつかのページは、サーバー側で
/サーバー/サイド/ルート
次に、クライアント側で React ルーターは、次のように設定されたコンポーネントをレンダリングします。
/react/route
前のシナリオと同様です。
関連
-
[解決済み] material-ui-pickers KeyboardDatePicker をモーメントで使用するには?
-
[解決済み] TypeError: reactjs の未定義のプロパティ 'status' を読み取ることができません。
-
[解決済み] Static HTML elements with event handlers require a role." を修正するにはどうすればよいですか?
-
[解決済み] reactのuseStateフックでコールバックを使う方法 [重複]。
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] npxとnpmの違い?
-
[解決済み] Reactのstateとpropsの違いとは?
-
[解決済み] React / React Nativeでコンストラクタを使用する場合とgetInitialStateを使用する場合の違いとは何ですか?
-
[解決済み] Reactでes6クラスを使うときの「super()」と「super(props)」の違いとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Reactコンポーネント内でswitchステートメントを使用するには?
-
[解決済み】プリセットファイルはオブジェクトのエクスポートができない
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] React JSでは、状態を直接変異させない、setState() react/no-direct-mutation-stateを使用する。
-
[解決済み] ReactJs "インバリアント違反..." リアクトの古典的な問題
-
[解決済み] eslint: no-case-declaration - case ブロックで予期しない字句の宣言があった。
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] React」は定義される前に使用されていた
-
[解決済み] ESLintとTSLintの違い【クローズド】について
-
[解決済み] React JSXのforEach()でHTMLが出力されない