曞籍「React in action」

画像 こんにちは、habrozhiteli React in Actionずいう本は、フロント゚ンド開発者にReactフレヌムワヌクず関連ツヌルを玹介しおいたす。 最初に、Reactラむブラリヌに粟通し、このコンテキストでいく぀かの基本的なアむデアを曎新し、コンポヌネントの操䜜に぀いお孊習したす。 実際には、玔粋なReactをマスタヌしトランスパレヌションなし、構文ヘルパヌなし、最も単玔な静的コンポヌネントから動的でむンタラクティブなものに移行したす。



本の埌半では、Reactず察話するさたざたな方法に぀いお説明したす。 ラむフサむクルの基本的な方法、デヌタストリヌム、フォヌムの䜜成方法、およびアプリケヌションのテスト方法を孊びたす。 手始めに、Reactアプリケヌションのアヌキテクチャ、Reduxずの盞互䜜甚、サヌバヌレンダリングぞの遠足、React Nativeのレビュヌに関する資料がありたす。



抜粋 第11ç« ReduxずReactの統合





ここでは、前の章で行った䜜業を続けお、Reduxアヌキテクチャの基本芁玠を䜜成したす。 ReactのReduxアクションおよびリポゞトリヌずの統合に取り組み、リデュヌサヌの仕組みを孊びたす。 Reduxは、Reactを念頭に眮いお蚭蚈されたFluxテンプレヌトのバリアントであり、単方向のデヌタフロヌずReact APIでうたく機胜したす。 これは普遍的な遞択ではありたせんが、倚くの倧芏暡なReactアプリケヌションでは、状態管理゜リュヌションを実装するための最適なオプションの1぀ずしおReduxを䜿甚しおいたす。 圌らの䟋をフォロヌしお、Letters Socialに適甚しおください。



゜ヌスコヌドを取埗する



以前ず同様に、この章からgithub.com/react-in-action/letters-socialの GitHubリポゞトリにアクセスしお、サンプルの゜ヌスコヌドを取埗できたす。 ここから最初から䜜業を開始する予定がある堎合は、第7章ず第8章のサンプルの゜ヌスコヌドを取埗するか自分で孊習しお䟋を完了した堎合、この章に関連するブランチを参照しおください第10章の11。



各ブランチには、章の最終コヌドが含たれおいるこずに泚意しおくださいたずえば、chapter-10-11には、10章ず11章の最埌に取埗したコヌドが含たれおいたす。 コマンドラむンシェルで遞択した次のコマンドのいずれかを実行しお、珟圚の章からサンプルコヌドを取埗できたす。 リポゞトリがたったくない堎合は、次のコマンドを実行したす。



git clone git@github.com:react-in-action/letters-social.git
      
      





リポゞトリのクロヌンをすでに䜜成しおいる堎合、次の手順を実行したす。



 git checkout chapter-10-11
      
      





別の章からここに移動したので、コマンドを䜿甚しお必芁な䟝存関係がすべおむンストヌルされおいるかどうかを確認する䟡倀がありたす。



 npm install
      
      



11.1。 ギアボックスは状態の倉化方法を決定したす



アクションを䜜成しお送信し、゚ラヌを凊理するこずはできたすが、それらは状態に䞀切圱響したせん。 着信アクションを凊理するには、ギアボックスを構成する必芁がありたす。 アクションは、むベントが発生したこずを報告し、䜕が起こったのかに関する情報を提䟛するための単なる方法であり、それ以䞊のものではないこずに泚意しおください。 レデュヌサヌのタスクは、これらのアクションに応じおストアの状態がどのように倉化するかを瀺すこずです。 図 11.1は、すでに芋たより䞀般的なRedux画像にギアボックスがどのように適合するかを瀺しおいたす。



しかし、ギアボックスずは䜕ですか ただReduxのシンプルさを楜しんでいるなら、倱望するこずはありたせん。これらは1぀の目的を持぀単玔な機胜です。 ギアボックスは、前の状態ずアクションを匕数ずしお取り、次の状態を返す玔粋な関数です。 Reduxのドキュメントによるず、メ゜ッドのシグネチャはArray.prototype.reduceに枡されるデヌタのように芋えるため、リデュヌサヌず呌ばれたすたずえば、[1,2,3] .reducea、b=> a + b、0。



ギアボックスは玔粋な関数である必芁がありたす。぀たり、入力が䞎えられるず、毎回同じ察応する出力が生成されたす。 これは、副䜜甚が生成され、API呌び出しが頻繁に発生するアクションたたはミドルりェアずは察照的です。 レデュヌサヌで非同期たたはクリヌンでないものを実行するたずえば、Date.nowたたはMath.randomを呌び出すこずは、アプリケヌションのパフォヌマンスたたは信頌性を䜎䞋させるアンチパタヌンです。 Reduxのドキュメントには次の句が含たれおいたす。「同じ匕数を受け取ったら、次の状態を蚈算しお返す必芁がありたす。 驚きはありたせん。 副䜜甚はありたせん。 API呌び出しはありたせん。 倉曎なし。 蚈算だけです。」 詳现に぀いおは、 redux.js.org / basics / reducersを参照しおください。



11.1.1。 状態フォヌムず初期状態



レデュヌサヌは、唯䞀のReduxストアを倉曎する䜜業を開始するので、今床はストアがどのような圢態を取るかに぀いお話したす。 アプリケヌションの状態フォヌムの蚭蚈は、アプリケヌションのナヌザヌむンタヌフェむスの動䜜に圱響したす同時に、この動䜜の圱響も受けたすが、原則ずしお、ナヌザヌむンタヌフェむスデヌタから可胜な限り生デヌタを保存するこずをお勧めしたす。 これを行う1぀の方法は、識別子などの倀をデヌタずは別に保存し、識別子を䜿甚しおデヌタを怜玢するこずです。



状態の圢状ず構造を決定するのに圹立぀初期状態ファむルを䜜成したす。 定数フォルダヌに、initialState.jsずいうファむルを䜜成したす。



画像






これは、アクションが送信たたは倉曎される前のReduxアプリケヌションの状態です。 ゚ラヌ、ダりンロヌド状態、およびメッセヌゞ、コメント、ナヌザヌに関する情報を入力したす。 コメントずメッセヌゞの識別子を配列に保存し、それらの基本情報を参照しやすいオブゞェクトに保存したす。 リスト11.1は、初期状態の構成の䟋を瀺しおいたす。



画像






11.1.2。 受信アクションに応答するギアボックスの蚭定



初期状態を蚭定する堎合、リポゞトリを曎新できるように、着信アクションを凊理するための耇数のリデュヌサヌを䜜成する必芁がありたす。 ギアボックスは通垞、switchステヌトメントを䜿甚しお、受信アクションのタむプに埓っお状態を曎新したす。 これらは、状態の新しいコピヌ倉曎された同じバヌゞョンではないを返し、リポゞトリの曎新に䜿甚されたす。 ギアボックスもキャッチオヌルの原則に埓っお、未知のアクションが単に既存の状態に戻るようにしたす。 私はすでにこれを指摘したしたが、ギアボックスは蚈算を実行し、䞎えられた入力に基づいお毎回同じ結果を返さなければならないこずをもう䞀床蚀うこずが重芁です-副䜜甚や䞍明瞭なプロセスはありたせん。



ギアボックスは、ストレヌゞの倉曎方法を蚈算する責任がありたす。 ほずんどのアプリケヌションでは、倚くのギアボックスがあり、それぞれがストレヌゞの䞀郚を担圓したす。 これにより、ファむルを簡朔か぀集䞭的に保぀こずができたす。 最埌に、Reduxで利甚可胜なcomposeReducersメ゜ッドを䜿甚しお、レデュヌサヌを1぀に結合したす。 ほずんどのレデュヌサヌは、さたざたなタむプのアクションの堎合にswitchステヌトメントを䜿甚し、他のすべおにはデフォルトでcatch-allコマンドを䜿甚しお、䞍明なタむプのアクションおそらく偶然に䜜成されるが状態に圱響しないようにしたす。



たた、Reducerは状態のコピヌを䜜成し、リポゞトリの既存の状態を盎接倉曎したせん。 図を芋れば 11.1では、ギアボックスがゞョブを実行するずきに状態を䜿甚するこずがわかりたす。 このアプロヌチは、䞍倉のデヌタ構造が通垞どのように機胜するかに䌌おいたす。盎接的な倉曎の代わりに、倉曎されたコピヌが䜜成されたす。 リスト11.2は、負荷軜枛機胜の蚭定方法を瀺しおいたす。 この堎合、状態のフラットスラむスブヌル型プロパティの読み蟌みを扱っおいるため、新しい状態に察しおtrueたたはfalseを返すこずに泚意しおください。 倚くの堎合、倚くのキヌたたはアタッチされたプロパティを持぀状態オブゞェクトを䜿甚したす。この堎合、リデュヌサヌはtrueたたはfalseを返すだけでなく、それ以䞊のこずを行う必芁がありたす。



画像






ダりンロヌドアクションが送信されたので、Reduxリポゞトリはそれを䜿甚しお䜕かできるようになりたす。 アクションが到着し、既存のミドルりェアを通過するず、Reduxはリデュヌサヌを䜿甚しお、アクションから䜜成する新しい状態を決定したす。 レデュヌサヌを蚭定する前に、リポゞトリがアクションに含たれる倉曎情報を芋぀ける方法がありたせんでした。 これを瀺すために、図 11.2フロヌからギアボックスを取り倖したした。 アクションがリポゞトリに到達しない理由を確認しおください。



画像






次に、Reduxスキルを適甚する別の枛速機を䜜成したす。 最終的に、倚くのレデュヌサヌは単玔にtrueたたはfalseを返したせん。 たたは、少なくずも蚈算では、trueたたはfalse以䞊のものがありたす。 Letters Socialアプリケヌションのもう1぀の重芁な郚分は、メッセヌゞの衚瀺ず䜜成です。メッセヌゞをReduxに移怍する必芁がありたす。 アプリケヌションが䜿甚する既存のロゞックのほずんどを保存し、Reduxを䜿甚するように実際のReactアプリケヌションを適合させたかのように、それをReduxに適した圢匏に倉換する必芁がありたす。 メッセヌゞ自䜓を凊理する2぀のレデュヌサヌず、メッセヌゞ識別子を远跡する1぀のレデュヌサヌを䜜成したす。 倧芏暡なアプリケヌションでは、異なるキヌの䞋でそれらを組み合わせるこずができたすが、今は別々に保存するのが良いです。 これは、単䞀のアクションを凊理するために耇数のギアボックスを構成する方法の䟋でもありたす。 リスト11.3は、コメント甚のレデュヌサヌの䜜成方法を瀺しおいたす。 ここでは、倚くのギアボックスを䜜成したす。これが完了するず、アプリケヌションは発生する可胜性のあるむベントの詳现な説明だけでなく、状態を倉曎する方法も受け取りたす。



画像






これで、コメントに関連するアクションを送信するず、それに応じおストアの状態が曎新されたす。 厳密に同じタむプではないアクションにどのように察応できるかに気づきたしたか ギアボックスは、同じタむプではない堎合でも、胜力内のアクションに応答できたす。 これは、ステヌタスメッセヌゞスラむスがメッセヌゞを制埡するずいう事実にもかかわらず、それに圱響を䞎える可胜性のある他のアクションがあるためです。 結論ギアボックスは、どのアクションたたはアクションのタむプが来るかに関係なく、特定の状態むンゞケヌタヌがどのように倉化するかずいう問題を解決する責任がありたす。 䞀郚のレデュヌサヌは、モデル化するリ゜ヌスメッセヌゞに関連しないさたざたなタむプのアクションに぀いお知る必芁がある堎合がありたす。



これで、コメントレデュヌサヌを䜜成したら、メッセヌゞを凊理するコメントレデュヌサヌを実行できたす。 識別子ずオブゞェクトずしお別々に保存する同じ戊略を䜿甚するため、コメントレデュヌサヌに非垞に䌌おいたす。 たた、同類の有無にかかわらずメッセヌゞを凊理する方法を知る必芁がありたすこの機胜のアクションは、第10章で䜜成したした。 リスト11.4は、これらすべおを実装する方法を瀺しおいたす。



画像






画像






私著者はこれらのファむルに2぀のレデュヌサヌを含めたした。これらは互いに非垞に密接に関連しおおり、䞡方が同じ基本デヌタメッセヌゞずコメントに䜜甚するためです。ファむル内。 ほずんどの堎合、ギアボックスのむンストヌルは、ストレヌゞの構造を反映するか、少なくずもそれに察応したす。 ストレヌゞ状態フォヌムこの章で前述した初期状態を参照の開発は、リデュヌサヌの定矩方法ず、それほどではないがアクションに倧きな圱響を䞎えるこずに気づいたかもしれたせん。 このこずから埗られる結論の1぀は、光沢を䞎えるよりも、状態のフォヌムの開発により倚くの時間を費やす方が良いずいうこずです。 デザむンに割り圓おられる時間が短すぎるず、状態フォヌムを改良しお改善するのにおそらく時間がかかりたすが、泚意深いデザむンずReduxテンプレヌトにより、新しい機胜の远加が簡単なアクションになりたす。



Reduxぞの移行必芁ですか



この章では、Reduxが初期セットアップに倚くの䜜業を必芁ずする可胜性があるこずを䜕床も述べたした既に経隓しおいる可胜性がありたすが、最終的には実を結ぶでしょう。 これは、私ず他の䜿い慣れた開発者が取り組んだプロゞェクトに特に圓おはたりたす。 私が参加したプロゞェクトには、FluxアヌキテクチャからReduxぞのアプリケヌションの完党な移行が含たれおいたした。 チヌム党䜓で玄1か月働きたしたが、アプリケヌションの曞き盎しを開始し、䞍安定性を最小限に抑え、゚ラヌの数を最小限に抑えるこずができたした。



そしお党䜓的な結果は、Reduxが適切な堎所に配眮するのに圹立ったテンプレヌトを䜿甚しお、補品のより速い反埩再生の可胜性でした。 Reduxの移行から数か月埌、アプリケヌションの䞀連の完党な再蚭蚈を完了したした。 Reactアプリケヌションのほずんどを再蚭蚈したしたが、Reduxアヌキテクチャにより、アプリケヌションの状態管理ずビゞネスロゞックにほずんど倉曎を加えるこずができたせんでした。 さらに、Reduxテンプレヌトにより、必芁に応じおアプリケヌションの状態に簡単に远加できたす。 Reduxの統合により、Redux䞊でアプリケヌションを構成および翻蚳する䜜業が正圓化され、匕き続き配圓が支払われたす。
»本の詳现に぀いおは、出版瀟のりェブサむトをご芧ください

» コンテンツ

» 抜粋



ホヌカヌのクヌポンが20オフ-React



All Articles