React-router 4.0 でサーバーが BrowserRouter とどのように連携するかに関するチュートリアルの例

小云云
リリース: 2017-12-29 16:29:07
オリジナル
2022 人が閲覧しました

react-router は、React フレームワークのルーティング ソリューションとして React プロジェクトで重要な役割を果たします。この記事では、react-router 4.0 でのサーバーと BrowserRouter の連携に関する詳細な説明を中心に紹介します。編集者が非常に優れていると考えたので、参考として共有します。編集者をフォローして見てみましょう。皆さんのお役に立てれば幸いです。

react-router バージョン 4.0 では、以前のバージョンと比較して API が大幅に変更され、2.0 および 3.0 で一般的に使用されていた コンポーネントは、基礎となるルーティング構成コンポーネントとして使用されなくなりました。それぞれ異なるルーティング コンポーネントです:

コンポーネントは「URL」情報をメモリに保存し、ブラウザのアドレスを変更しません。 bar は、React Native やテスト環境などの非ブラウザ環境でよく使用されます。

コンポーネントはルートを変更しないことがその名前からわかります。これはサーバー側のレンダリング中に非常に役立ちます。

コンポーネント 私たちが最もよく知っているルーティングコンポーネントについて詳しく説明する必要はありません。ここでは、react-router が推奨する を使用するときに遭遇した落とし穴について説明します。

の違いは、前者は rul のパス名セグメントに基づいており、後者はハッシュ セグメントに基づいていることです。 。

前者: http://127.0.0.1:3000/article/num1

後者: http://127.0.0.1:3000/#/article/num1 (必ずしもそうとは限りませんが、# は必須です) )

この違いによって生じる直接的な問題は、第 2 レベルまたはマルチレベルのルーティング状態では、ページを更新すると、 が現在のルートをサーバーに送信しますが (これはパス名であるため)、< ;HashRouter> は行われません (ハッシュ セグメントであるため)。

フロントエンドのルートがバックエンドに送信されることは絶対に望ましくありません。

react-router 4.0 のドキュメントには次の一節があります:

注: ハッシュを使用したナビゲーション履歴の記録は、location.key と location.state をサポートしていません。 以前のリリースでは、この動作に対して shim を提供していましたが、解決できない問題がまだいくつかありました。 この動作に依存するコードやプラグインは正しく機能しません。 このテクノロジーはレガシー ブラウザのみをサポートするように設計されているため、ブラウザで使用する場合は代わりに を使用できます。

これには、サーバーがフロントエンドと連携していくつかの簡単な変更を行う必要があります。

この変更のアイデアは、リクエストされた URL が機能せず、フロントエンド ルートである場合に、エントリ HTML ファイル (私の背景は Nodejs) をリロードすることです。


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  //判断是主动导向404页面,还是传来的前端路由。
   //如果是前端路由则如下处理

  fs.readFile(__dirname + &#39;/public/dist/index.html&#39;, function(err, data){
    if(err){
      console.log(err);
      res.send(&#39;后台错误&#39;);
    } else {
      res.writeHead(200, {
        &#39;Content-type&#39;: &#39;text/html&#39;,
        &#39;Connection&#39;:&#39;keep-alive&#39;
      });
      res.end(data);
    }
  })
});
ログイン後にコピー

ここには数え切れないほどの落とし穴があります。インターネットでメソッドを検索した後、nginx に切り替え、try_files フィールドを使用してエントリ html にダイレクトしましたが、リダイレクト後、webpack によってパッケージ化された js ファイルが実行されませんでした。 。

firebug を確認すると、この更新の応答ヘッダーに「Connection」:「keep-alive」が設定されていることがわかりました。問題はここにあるはずで、nodejs に切り替えてキープアライブで 200 ステータスを使用すると解決されます。問題。

react-router 4.0 マルチレベルルーティングでページを更新しても 404 は発生しなくなりましたが、フロントエンドの状態は保存されます。

関連する推奨事項:


React-router HashRouter と BrowserRouter の使用方法に関する簡単な説明

react-router browserHistory 更新ページ 404 の問題の解決方法

コンポーネント間のジャンプを実現する 3 つの Vue-Router

以上がReact-router 4.0 でサーバーが BrowserRouter とどのように連携するかに関するチュートリアルの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!