[解決済み] React-Router - リンク vs リダイレクト vs ヒストリー
質問
どちらを使うか迷うことがあるようです。
-
<Link to='/some/path'>
-
<Redirect to='/some/path'/>
-
history.push('/some/path')
私は少し前からReact/Routerを使用していますが、異なる投稿/回答は、これらを使用するタイミングに関して異なることを言っており、時には他の誰かが言ったことと一致しないことがあります。だから、私はこれについていくつかの明確化が必要だと思います。
について私が理解しているところでは
Link
と、この
ドキュメント
それ
アプリケーションの周りに宣言的でアクセス可能なナビゲーションを提供します。
について私が理解しているところでは
Redirect
と、この
ドキュメント
それ
新しい場所に移動します。新しい場所は、サーバサイドリダイレクト (HTTP 3xx) が行うように、履歴スタックで現在の場所を上書きします。
私が読んだすべての投稿のように、ほとんど誰もが
Redirect
を使うことを推奨しているようですが、誰も
Link
のように
ポスト
.
現在
history
と同じことができます。
Link
と
Redirect
を使用した場合、履歴のスタックトレースが表示されます。
質問1:
どのような場合に
Link
対
Redirect
とでは、どのような使い分けがあるのでしょうか?
質問2:
から
history
は、履歴スタックの追加ボーナスでユーザーをアプリ内の別の場所にルーティングできるので、ルーティングするときは常に履歴オブジェクトを使用すればよいのでしょうか?
質問3: もし私が の外側 の外にルーティングしたい場合、どのような方法が一番良いでしょうか?アンカー タグ、Window.location.href、Redirect、Link、上記のどれでもない?
どのように解決するのですか?
まず、このサイトに目を通すことを強くお勧めします。
https://reacttraining.com/react-router/web/api/BrowserRouter
React Routerの
BrowserRouter
は履歴スタックを維持するので、手動で修正する必要はほとんどありません。
しかし、あなたの質問に答えるために
回答1
あなたは
Link
または
NavLink
を使うことができます。
Redirect
は特定の状況では便利ですが、例えば、ユーザーが未定義のルートにアクセスしようとしたときに 404 ページがレンダリングされる場合です。そのため
Redirect
はユーザーを 404 ルートからあなたが選んだ新しいルートにリダイレクトし、履歴スタックの最後のエントリをリダイレクトされたルートに置き換えます。
これは、ユーザーがブラウザーの戻るボタンを押しても、404 ルートに戻ることができないことを意味します。
Link
NavLink
そして
Redirect
はすべてルータの履歴 API を使用しており、 手動で履歴を作成する代わりにこれらのコンポーネントを使用することで、 将来履歴 API に変更があった際にも安全に対応できます。これらのコンポーネントを使用することで、将来にわたってあなたのコードを保護することができます。
回答2:
BrowserRouter
あなたのために履歴スタックを維持します。一般的に私の意見は、あなたができる限り手動でそれを更新することから離れたいことです。
回答3
外部反応リンクの例をいくつか挙げておきます。
<Route path='/external' component={() => window.location = 'https://external.com/path'}/>
<a href='https://external.com/path' target='_blank' rel='noopener noreferrer'>Regular Anchor tags work great</a>
target='_blank'
は新しいタブでリンクを開きますが、その際に必ず
rel='noopener noreferrer'
を記述してください。
脆弱性
関連
-
[解決済み] リアクトです。<tr>は<td>の子として表示できません。コメント > td > tr を参照してください。
-
[解決済み] react nativeで関数だらけのヘルパーファイルを作成する方法は?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] React Router v4で履歴にプッシュする方法は?
-
[解決済み] React Router v4 - 現在のルートを取得する方法は?
-
[解決済み】オプションのパスパラメータを持つReact Router
-
[解決済み】react router v4 / v5でネストされたルート
-
[解決済み】react-router vs react-router-dom、いつどちらかを使うか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】<Router>の外側で<Link>を使用してはならない
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] jest: テストスイートの実行に失敗しました。予期しないトークンのインポート
-
[解決済み] MUI Boxは何のためのコンポーネントですか?
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] eslint: no-case-declaration - case ブロックで予期しない字句の宣言があった。
-
[解決済み] validateDOMNesting警告React
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] target="_blank" と rel="noopener noreferrer" を含むリンクはまだ脆弱?
-
[解決済み] Reactプロジェクトに.envファイルを追加する