Reactでのサーバーサイドレンダリング— Redux

サーバーとクライアントの両方でReduxストアを処理する方法。

Reactでのサーバー側レンダリングに関するシリーズの第3部へようこそ。前回、サーバーとクライアントの両方でレンダリングされるようにプロジェクトを構成する方法について説明しました。今日は、前の例にReduxを追加してみます。

Reduxの基本をご存知だと思いますので、説明に時間をかけません。FluxアーキテクチャとRedux自体の概念に慣れていない場合は、公式ドキュメントを確認してください。

パッケージのインストール

まず最初に—サーバーとクライアントの両方でReduxを使用するようにアプリケーションを構成する前に、2つのパッケージをインストールする必要があります。

reduxとreact-reduxパッケージを追加する

reduxパッケージには、ちょうどReduxのライブラリが含まれています。react-redux依存性はReduxのを接続する私たちを助け、コンポーネントを反応します。

レデューサー+アプリコンポーネントの変更

必要なパッケージがすべてインストールされたので、プロジェクトへのReduxの追加に進むことができます。レデューサーの追加から始めましょう—それを行うために、reducersフォルダーをsrcディレクトリーに追加し、index.jsファイルをその中に配置しました。このファイルの内容を見てください:

reducers /index.jsファイル

上記のレデューサーは、CHANGE_TEXTという1つのアクションタイプのみを処理します。initialText状態プロパティの値を変更します。次に行うことはApp.js、ボタンのクリックでアクションをディスパッチするようにコンポーネントコードを修正することです。これが私たちがそれを行う方法です:

修正されたApp.jsコンポーネント

ご覧のとおり、コンポーネントの内部状態は完全に削除されています。これからは、Reduxストアで状態をグローバルに保持するためです。パッケージconnectからインポートされた関数のおかげで、react-redux状態プロパティ(mapStateToPropsメソッド)とアクションをディスパッチするメソッド(mapDispatchToProps関数)をコンポーネントのpropsオブジェクトに挿入することができます。

サーバー側の構成

次に、ソリューションのサーバー部分にいくつかの変更を加えます。以下の変更されたserver.jsファイルを参照してください。

変更されたserver.jsファイル

では、ここで何が変わったかを分析しましょう。まず、インポートのセクションをご覧ください。パッケージcreateStoreからメソッドをインポートしreduxます。ライブラリのProvideコンポーネントreact-reduxとreducers、数分前に追加したばかりのコンポーネント。

それでは、それらの使用方法をご覧ください。呼び出すことによってcreateStoreで機能をreducersし、initialStateそのパラメータとして渡された、我々はで初期化Reduxのストアの作成initialStateオブジェクトを。次に注意することは、AppコンポーネントをコンポーネントでラップすることProviderです。また、作成済みのReduxストアをその属性によってこのコンポーネントに渡します。そのおかげconnectで、App.jsファイルで使用した関数はストアにアクセスできます。

またinitialState、Htmlコンポーネントの属性としてオブジェクトを渡していることにも注意してください。すぐにわかるように、クライアント側ではまだ必要です。

クライアント側の構成

ご想像のとおり、最後に行うことは、クライアント側のコードを修正することです。以下のclient.jsファイルを参照してください。

変更されたclient.jsファイル

ここでは、server.jsファイルで行ったのと同じ3つのものをインポートしました。次に、reducers最初のパラメーターとして渡すストアも作成します。ここでの唯一の違いはcreateStore、初期状態として関数に渡すものです。これは、オブジェクトに格納されている値から作成されたAPP_STATEオブジェクトです。そのため、同じメカニズムを使用して、サーバーとクライアントの間で初期状態を共有しました。

もちろん、ここで最後に行ったことはProvider、Appコンポーネントをラップするコンポーネントの属性として、作成済みのストアオブジェクトを渡すことです。このようにしてconnect、クライアント側のReactコンポーネントで使用されるすべてのメソッドもストアにアクセスできるようになります。

概要

それが今日のすべてです。サーバーサイドでレンダリングされたReactアプリケーションにReduxを追加するのは非常に簡単だと思います。サーバー上に最初にストアを作成し、後でクライアントスクリプトがロードされたときにストアを作成する必要があります。また、初期状態を共有する必要がありますが、Reduxを使用せずに、前の例と同じメカニズムを使用してそれを実現できます。

今日説明した例は、私のGitHubリポジトリにあります。クローンを作成して、自分で試してみることをお勧めします。

Reactでのサーバー側のレンダリングについてはよく知っていると思いますが、これでシリーズは終わりではありません。次の記事では、react-routerを例に追加する方法を紹介します。

PSこの投稿は、Reactを使用したサーバーサイドレンダリングに関する一連の記事の一部です。以下のシリーズのすべてのアイテムのリストを参照してください。

提案された投稿

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

脳卒中の壊滅的な結果を避ける: 家族の旅から学ぶ 。

脳卒中の壊滅的な結果を避ける: 家族の旅から学ぶ 。

はじめに 脳卒中は、いつでも誰でも起こり得る医療上の緊急事態です。これは、脳の一部への血流が中断され、脳機能が突然失われることで発生します。

関連記事

無限の命

大人になると、世界はそういうもので、あなたの人生はただ世界の中で生きていくだけで、決して命を危険にさらすことはなく、決められた道をたどって最後には死ぬだけで、失敗しないように努めるのだと言われがちです。壁を打ちすぎてはいけません。しかし、それは非常に限られた人生です。

お子様向けの初めてのハイになる本

お子様向けの初めてのハイになる本

(警告 - これは風刺であり、大喜びで破壊的な意図があります - 絶対に子供向けではありません) あなたは、お母さんとお父さんがキッチンに隠れて臭いタバコを吸っているのを見たことがあるでしょう。彼らはあなたに言います。

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

米国は、人種差別的な行動と善良な米国人であることを同一視しないという重要な一歩を踏み出すことができるだろうか?

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

[警告: このエッセイには、ジョーダン ニーリー殺害の犯人を賞賛する人々のスクリーンショットが含まれています。] 法執行当局はついに、そしておそらくはしぶしぶではありましたが、ジョーダン ニーリーを死ぬまで首を絞めた男、ダニエル ペニーをその殺人罪で起訴しました。

脅威ハンティングのための OSINT の収集

脅威ハンティングのための OSINT の収集

サイバー愛好家の皆さん、こんにちは!OSINT for Threat Hunting シリーズへようこそ。最初の記事では、OSINT の概要と脅威ハンティングにおけるその重要性について説明しました。