Redux: EggheadのReduxスクリヌンキャストシリヌズ

䜜成日 2015幎11月24日  Â·  69コメント  Â·  ゜ヌス: reduxjs/redux

Reduxリポゞトリをフォロヌしおいるが、ただ詳しく調べおいない堎合、たたはその基本的な偎面のいく぀かに぀いお混乱しおいる堎合は、Eggheadが私のGetting Started withReduxシリヌズを公開したこずを知っお幞せです。

ドキュメントの「基本」の郚分ず同じトピックをカバヌしおいたすが、うたくいけば、もう少し深く掘り䞋げお、Reduxの基本を_本圓に_理解できるようにしたす。

Redux on Eggheadに関するコンテンツをさらに䜜成する予定です。今回は、サブスクラむバヌのみを察象ずしおいたす。 より高床なトピックを取り䞊げたす。 特定の提案があれば、このスレッドで知らせおください

feedback wanted

最も参考になるコメント

@markeriksonこの質問の行に私ず䞀緒にいおくれおありがずう。 議論の䜙地があるず思われるかもしれたせんが、これは「アプリレベル」ず「UIレベル」の違いであるずいう考えを少し抌し戻したいず思いたす。

泚䟿宜䞊、 thunkを䜿甚しお、実際にredux-thunkたたはredux-promiseであるかどうかにかかわらず、非同期ぞのアブリトラリヌミドルりェアアプロヌチを衚したす。

UIレむダヌは、ナヌザヌの操䜜をハンドラヌに接続するだけです。 誰かがボタンをクリックするず、UIは_some_ハンドラヌを呌び出すように蚭定されたす。 倚くの堎合、コンポヌネントはこれらのハンドラヌを小道具ずしお受け取りたす。たずえば、バむンドされたアクションの䜜成者です。 UIは、ハンドラヌを呌び出したずきに䜕が起こるかを認識しおいたせん---それを呌び出すだけです。

「ハンドラヌ」が関数をディスパッチするかミドルりェアによっお凊理される、非同期呌び出しを実行しおプレヌンアクションをディスパッチするかどうかはUIレむダヌに違いはありたせん--- UIは完党に䞍可知論的ですたたは少なくずも䞍可知論者になるこずができたす

サンクを䜿甚しおいるかどうかに関係なく、「アプリ」の倧郚分はこれらの「ハンドラヌ」にありたす。 兞型的なreact / reduxアプリでは、これらの「ハンドラヌ」は倚くの堎合、ある皮のアクションクリ゚ヌタヌです。 すべおの非同期のものをサンクずしお蚘述し、それらをディスパッチするこずができたす。 たたは、すべおの非同期のものを、匕数ずしおdispatchを受け入れる関数ずしお蚘述するこずもできたす。 コンポヌネントの芳点からは、 someHandler(dispatch)たたはdispatch(someHandler())いずれかです。たたは、バむンドされたアクションクリ゚ヌタヌが䞊から受け継がれる堎合は、どちらの堎合もsomeHandler()になりたす。 この違いをUIレむダヌから完党に隠すバヌゞョンのbindActionCreatorsを䜜成できたす。

redux-thunkを䜿甚しおアクションクリ゚ヌタヌで䜜成されたreact / reduxアプリケヌションを提䟛しおいただければ、UIレむダヌを_基本的に_倉曎せずに、redux-thunkを完党に亀換し、非ミドルりェアアプロヌチを䜿甚できたす。 泚 getStateをどこに/どのように泚入するかに぀いおは詳しく説明しおいたせんが、ここではそれが小さな詳现であるず_信じおいたす_。

そのため、「内郚」ず「倖郚」の区別が「アプリレベル」たたは「UIレベル」であるこずを理解するのに苊劎しおいたす。

私は議論に感謝したす、そしお私は私が吊定的に出くわさないこずを望みたす。

党おのコメント69件

+1

  1. ロヌカルコンポヌネントの状態ずグロヌバル状態
  2. 耇数のレデュヌサヌによっお凊理されるアクションず1察1のアクションずレデュヌサヌの関係
  3. 最初のアクションが終了した盎埌に2番目のアクションをトリガヌする必芁がある堎合の、アクションチェヌン特に非同期のものの凊理。
  4. 䞍必芁な再レンダリングを防ぐための最適化技術バッチ凊理、再遞択など。

+1

シリヌズの最初の16゚ピ゜ヌドを芋たばかりですが、これらは、私が働いおいる䌚瀟の瀟内トレヌニングに䜿甚する可胜性が高い優れたリ゜ヌスだず思いたす。 ただし、状態ツリヌにプレヌンオブゞェクトずディヌプフリヌズのみを䜿甚し、 immutable-jsのよう

これに぀いおのあなたの考えを知るこずは玠晎らしいこずです。

Immutableをミックスに投入するず、ReduxずImmutable APIを区別するこずを孊ぶ必芁がある初心者を混乱させたり、Immutableが必芁であるず想定したりする可胜性がありたす。

Immutableをミックスに投入するず、ReduxずImmutable APIを区別するこずを孊ぶ必芁がある初心者を混乱させたり、Immutableが必芁であるず想定したりする可胜性がありたす。

わかりたした、理にかなっおいたす。 この決定の背埌にあるあなたの考えを知っおおくのは良いこずです:-)。

@smashercosmoが蚀ったこず+1

ナニットテスト。 TDD。

@catelandが蚀ったこず+1

私はあなたのスキルセットに非垞に感銘を受けおいるず蚀わなければなりたせん。この方法で、豊富なドキュメントず簡朔なチュヌトリアルを備えた優れたjsラむブラリを䜜成できたす。

すべおのビデオを芋た埌、私はメヌルで送る特定のビデオに぀いおたくさんのフィヌドバックを持っおいたす。 結論は、これはReduxの玹介以䞊のものであるずいうこずです。 コヌドプラクティスやコンポヌネントアヌキテクチャなどをカバヌしたす。 それは本圓に玠晎らしく、非垞に教育的です。 ビデオは3぀のグルヌプに分けるこずができるず思いたす。 基本的なRedux、舞台裏でのRedux、Reactを䜿甚したRedux。

今埌のビデオでは、特定の抂念に反応するこずを少なくし、非同期アクションずテストに぀いおもっず詳しく芋おいきたいず思いたす。

非垞によくやった、それを続けおください :)

ビデオ21では、TodoAppコンポヌネントはクラスである必芁はなく、関数である可胜性があるこずに泚意しおください。 この実珟に至った経緯を説明できれば玠晎らしいず思いたす。これが機胜コンポヌネントずしお適しおいる理由ず、これによっおどのようなメリットが埗られるのでしょうか。

これすごくいいね。

@smashercosmoのリストの項目3も知りたいです。

@wpannellが蚀ったこず ナニットテスト/ TDD

たた、高床なドキュメントでカバヌされおいるトピックに関するビデオを芋たいず思いたす。

ナニットテストに関しお、具䜓的に䜕に興味がありたすか
レッスン5、11、12は、レデュヌサヌの単䜓テストの方法を瀺しおいたす。

...それは良い質問です。 モカテストの堎合、プロセスは倧きく倉わりたすか

あたり。 しかし、それは䞀連の高床なレッスンにずっお良いトピックだず思いたす。 ナニットテストレデュヌサヌ、アクションクリ゚ヌタヌ、コンポヌネントなど。

たず、玠晎らしいビデオ。 すでにreduxを理解しおいたすが、それはさわやかでした。
より高床なビデオを䜜成しおいる堎合は、非同期アクション/ミドルりェアをお勧めしたす。
ナニットテストが実際にカバレッゞを必芁ずするずは思わないでください。 レデュヌサヌ関数を呌び出しお、それらをアサヌトできたすか

ええ、モカテストでexpectラップする以倖に、実際にはそれほど倚くはないず思いたす。 いいぞ

ありがたいこずに、すべおがずおもシンプルです

オブゞェクトIDハッシュによる䞍倉性䟋 [post._id]: {...post} 。

reduce関数に過床に䟝存しお、API゚ンティティの配列を取埗し、それを䜿甚しおIDハッシュを生成しおいるこずに気付きたした。 normalizrがこれの䞀郚を凊理するこずは知っおいたすが、ポむントAからBに移動するEggheadIOビデオに䌌たビデオが欲しいです。これは、Reduxベヌスのものだけではなく、非垞に絡み合っおいたす。

@raquelxmoss

ビデオ21では、TodoAppコンポヌネントはクラスである必芁はなく、関数である可胜性があるこずに泚意しおください。 この実珟に至った経緯を説明できれば玠晎らしいず思いたす。これが機胜コンポヌネントずしお適しおいる理由ず、これによっおどのようなメリットが埗られるのでしょうか。

それは実際、私の偎でのずさんなレッスン蚈画でした。 最初から機胜的なコンポヌネントにするこずができたのは手遅れになるたで気づきたせんでした。 クラスよりも関数を䜿甚する利点は単玔さであるため、できる限りい぀でもこれを実行しおください。 基本的に、 componentDidMountやstateのようなラむフサむクルフックが必芁ない堎合は、機胜コンポヌネントを䜿甚したす。

これらのコヌドを実際のディレクトリ構造に分割しお圹立぀ようにする方法に぀いおのレッスンを芋぀けたす。 すべおが揃っおいる限り、おそらく機胜するこずはわかっおいたすが、フォルダヌの呜名芏則コンポヌネント/コンテナヌ/ストア/レデュヌサヌなど、どの皮類のファむルがどのフォルダヌに入るのかなどをお勧めしたす。

高床なレデュヌサヌ構成もお願いしたす。

耇雑なコンポヌネントの再利甚レデュヌサヌたたは耇数のレデュヌサヌ、䞀連のアクション、アクションクリ゚ヌタヌ、サヌバヌ偎APIぞのアクセス、redux圢匏などのいく぀かのReactコンポヌネントで構成されおいたすが、より珟実的なアプリ固有です。 これには、モゞュラヌディレクトリ構造の線成も含たれたす。

党郚芋お、ずおも良かった ES6 / 7構文 Object.assignようなの䜿甚、React 0.14関数コンポヌネント、および䞍倉のものの回避に感謝したす。

おそらく、掚奚されるコヌドアヌキテクチャを説明するビデオです。

そしお、ES6 / 7構文を䜿甚するようにドキュメントを曎新したすか PRはその方向に歓迎されたすか

単䜓テスト、APIミドルりェアの䜜成、ReduxでのOAuth /ある皮のナヌザヌ認蚌の実行、reduxでのImmutableの䜿甚セットアップ方法、ベストプラクティスなど

このシリヌズは、Redux、単䞀原子状態、および関連する哲孊の優れた入門曞ずしお圹立ちたす。 私はあなたが認知的過負荷を誘発するこずを避けながら、コア原則に焊点を合わせるずいう玠晎らしい仕事をしたず思いたした。 䜜業した環境も簡単に耇補できるため、実践的な郚分がさらに芪しみやすくなりたす。

@gaearonサンプル動画の構造化アクションは、最初から暙準の{ type: string, payload: Object }なりたいず思いたすか ペむロヌドがアクションオブゞェクト自䜓に配眮されるカりンタヌリストの䟋に぀いお話しおいたす。 { type: string, index: number } 。 これは私にはアンチパタヌンのように芋えたす。

サンプル動画の構造化アクションを、最初から暙準の{typestring、payloadObject}にしたいず思いたすか ペむロヌドがアクションオブゞェクト自䜓に配眮されるカりンタヌリストの䟋に぀いお話しおいたす。 {タむプ文字列、むンデックス数倀}。 これは私にはアンチパタヌンのように芋えたす。

それは決しおアンチパタヌンではありたせん。 これは通垞のアクションオブゞェクトです。 FSAは問題ありたせんが、それは_コンベンション_です。 Redux自䜓には、この芏則に䟝存したり、この芏則から利益を埗たりするものはないため、匷制したくありたせん。

人々 source 、元のFluxドキュメントのpayload 、 sourceに぀いおあらゆる皮類の魔法のこずを考えおいたした。 圌らは、なぜそれらが存圚するのかを理解せず、それらが必芁かどうかを泚意深く評䟡するこずなく、盲目的にこれらのものをコピヌしたした。 その埌、圌らはFluxが耇雑で冗長であるこずに䞍満を挏らしたしたが、実際には倚くの堎合、冗長なただし必須ではない郚分を自分でコピヌしたした。

これらのレッスンでは、Reduxの重芁な郚分のみを教えたす。 定数を導入しないこずに泚意しおください。なぜなら、人々は定数に集䞭しすぎお、それらが実際には重芁ではないこずを芋逃しおいるからです。 文字列にいく぀かのタむプミスをした埌は、最初からチュヌトリアルビデオに定数を入れた堎合よりも、定数の利点を理解する可胜性が高くなりたす。 FSAのような他の慣習に぀いおも同じこずが蚀えるず思いたす。䟿利だず思うなら、ぜひ䜿っおください。しかし、レッスンで芁求されない堎合は、説教したせん。

@gaearon OK、

@sompylasar

䟋は、ビデオチュヌトリアルよりも芏則を衚瀺する方が良いず思いたす。 䟋ずしおは、「これらの原則に基づいおコヌドを構築する方法は次のずおりです」ずいう意芋があり、ビデオはそれらの原則自䜓に関するものです。 これが、さたざたな䟋でさたざたな芏則が衚瀺される理由です。プロゞェクトを開始する前に、ほずんどの人はさたざたな䟋を調べお、さたざたな方法を詊しおみたす。

たた、FSAに埓わないこずに぀いお構造化されおいないものはたったくありたせん。 { type: 'STUFF', id: 1 }は本質的に{ type: 'STUFF', payload: { id: 1 } }より悪くはありたせん。 それは単に奜みず時にはツヌルの慣習の問題です。 アクションオブゞェクトをpayload少なくしおおけば、操䜜が難しくなるこずはありたせん。

すぐにeggheadでリリヌスされるいく぀かのreduxナニットテストレッスンがありたす😄

ダンが最初にクラックするために、Reduxのレッスンをしばらく延期したした。 完党に埅぀䟡倀があり、それからいく぀か。

「慣甚的なReduxでアプリケヌションを構築する」は玠晎らしい䞊玚コヌスになりたす👍

@joelhooks䞡方ずも玠晎らしいですね

jsbinを䜿甚する代わりに、webpackずホットリロヌドを䜿甚しおプロゞェクトをセットアップしおください。 これを珟実の䞖界に持ち蟌んでください。 私はそれがreduxに固有のものではないこずを知っおいたすが、それはうたくいくず思いたす、そしおあなたはこれを教えるのにふさわしい人です:)

@kevinrenskersはビデオシリヌズではありたせんが、䜕かを分析したい堎合は、参照できる非垞に優れた定型文の䟋がいく぀かありたす。

Danの䟋ずWebpack構成のプロゞェクト構造を芁求した人。

https://github.com/urbanvikingr/todoをチェックしお

ビデオのDanのコヌドに合わせお、ReactドキュメントでReduxを曎新するこずを玄束したした。 それは次の2週間以内に完了するでしょう-私のホリデヌプロゞェクト-お楜しみに。

Egghead.ioビデオぞの私のりィッシュリスト
ゞャスミンによるアクション/レデュヌサヌテスト
ミドルりェアの詳现サンク/プロミス

スクリヌンキャストは、Reduxの非垞に䟿利な玹介です。 私が聞きたいのは、ルヌティングずサヌバヌ偎のレンダリングを行うためのReduxの方法です

@grigioルヌティングに関するこのディスカッションhttps://github.com/rackt/redux/issues/1145に興味があるかもしれたせん

@urbanvikingrありがずう、賌読したした。 投祚は終了したようですが、私は1168に投祚したでしょう

レッスンは実はかなり良いですが、「店」ず蚀うず「雑甚」のように聞こえるのは気が散りたす。

ここの誰もがそれに気づき、気を取られおいたす。 圌らはそれを持ち出すにはあたりにも政治的に正しい。 そうそう、他の誰もそうしない堎合に備えお、私は_あの_男になるこずに決めたした:)

やがお英語が䞊手になりたす。 今のずころ、これは私ができる最善のこずです;-)

@gaearonあなたはReduxを説明するのにずおも良い仕事をしたした。 あなたずあなたのオヌプン゜ヌスの成果ぞの称賛。

玠晎らしいレッスンセット。 私は特に、「゜ヌスを読む」方法で各コアRedux関数を最初から再実装する方法が奜きでした。 チュヌトリアルずすべおのドキュメントがRedux向けであるこずに感銘を受けた他の誰かを出向させたす。 これたでのずころ、誰かが2幎間のフロント゚ンドの進歩に远い぀いおいるので、抂念は私の心を包み蟌むのが難しいですが、ドキュメントはそうするのに驚くほど圹に立ちたした。 それを続けおください、そしお感謝したす

たた、 @ jugimasterに耳をわけではありたせん。

@ianstormtaylor
ちなみに、それはアクセントではありたせん:)

私も「気にしない」のですが、気が散っおいたのは確かです

でもその䞀方で、6぀の倖囜語を勉匷しおいる私は、垞に正しく蚀語を話すこずを心がけおおり、そのために、誰かが私の間違いを指摘しおくれたこずに個人的に感謝しおいたす。

ねえ@gaearon 、

絶察にあなたのコヌスを愛しおいたした。 よくやった ずおも助かりたした。

最近のEggheadコヌスに3぀のReduxテストビデオレッスンを远加したした。
https://egghead.io/series/react-testing-cookbook

私の望みは、圌らがあなたがしたすべおの玠晎らしい仕事を補完するこずです

しっかりしたコヌス

Reduxの知識だけでなく、珟代の実践の知識党䜓を向䞊させたす そのような良いこずを続けおください+1  tada

ねえ、ちょうどビデオのコヌドぞのリンク/参照がないこずに気づきたした。 おそらく明癜であり、おそらく、十分に単玔なナヌザヌはビデオをコピヌするこずができたす。 しかし、私は倚くの人々がビデオの正確なコヌドでリポゞトリから利益を埗るこずができるず思いたす-なぜですか

すべおのレッスンのコヌドスニペットは、Eggheadサブスクラむバヌが利甚できたす。 :-)
ビデオは無料ですが、プラットフォヌムはお金を皌ぐ必芁があるため、より倚くのコヌスに投資したり、むンストラクタヌに機噚を送ったり、ビデオをホストしたり、Webサむトを改善したりできたす。

぀たり、コヌスにほが䞀臎するexamples/todosフォルダヌがありたす。

...かっこいい、私はそれを逃しおいたすか リンクを探しおいたす..。

@gaearonはお詫びしたす、ちょうどビデオを再蚪したした。 コヌドはすぐそこにありたす...ビデオを芋たり、メンバヌシップを賌入したり、他の人を芋たり...実際にログむンしたreduxビデオに戻っただけです。也杯。

ちなみに、筆蚘録が䞍正確だず䞍満を蚀う人もいたした。
それらを修正するためにPRを送信しおください https 

@gaearon reduxを䜿甚するこずにしたしたが、eggheadでreduxvidsを芋぀けたした。 ビデオは私がreduxを孊び始めるのを本圓に助けたした。 今埌、より倚くの実䟋を芋るこずができれば玠晎らしいず思いたす。

したがっお、今埌のreduxビデオトレヌニングに぀いおの私の提案は、高床な構成、リファクタリングの詳现、そしお間違いなく再遞択の䜿甚方法です。 い぀リファクタリングするかに぀いお盎感があるようです。 したがっお、関数型プログラミングはreduxず密接に関連しおいるため、リファクタリングのタむミングず、1぀のこずをうたく実行する関数を特定する方法に぀いおいく぀かのヒントを埗るこずが非垞に圹立ちたす。

私が構築しおいるアプリには、いく぀かの倧きなデヌタコレクションがあり、それらをテヌブルに配眮しお、デヌタの䞊べ替えやペヌゞ付けなどを行う必芁がありたす。 セレクタヌをい぀䜿甚するか、䜜成アクションをい぀䜿甚するかを決めるのに苊劎しおいたす。 珟圚、USERS_SORT_TABLEアクションずSORT_TABLEアクションがありたす。これは、ナヌザヌにテヌブルからの状態の「継承」を保存させるためです。 これを行ったのは、todoストアでSORT_TABLEアクションをナヌザヌストアで䞊べ替えたくないためです。

私の解決策がDRYではないこずは知っおいたすが、正しく行う方法がわかりたせん。 珟状では、テヌブルにデヌタを入力するすべおのストアに察しお「SOMETHING」_SORT_TABLEアクションを䜜成する必芁がありたす。これは間違っおいるず思いたすが、正しい方法がわかりたせん。 もう1぀の副䜜甚は、アクションの名前の前に別のストアを分離する必芁があるため、アクション名が倧きくなっおいるこずです。 これは正しくありえたせん。

次にいく぀かのサンプルコヌドを瀺したす。

/* actions.js */
// ...
export const USER_MOVE_COLUMN = 'USER_MOVE_COLUMN'

export function userMoveColumn (columnIndex, moveToIndex) {
  return {
    type: USER_MOVE_COLUMN,
    columnIndex,
    moveToIndex
  }
}

export const DATA_TABLE_MOVE_COLUMN = 'DATA_TABLE_MOVE_COLUMN'
// ...

/* reducers.js */
// ...
export default function user (state=userInitialState, action) {
  switch (action.type) {
    // ...
    case USER_MOVE_COLUMN:
      return dataTable(state, assign(
        action,
        {type: DATA_TABLE_MOVE_COLUMN}
      ))
    // ...
    default:
      return state
  }
}
// ...
export default function dataTable (
  state=dataTableInitialState,
  action,
  key='dataTable')
{
  switch (action.type) {
    // ...
    case DATA_TABLE_MOVE_COLUMN:
      return {
        ...state,
        [key]: {
          ...state[key],
          columns: move(
            state[key].columns, action.columnIndex, action.moveToIndex
          )
        }
      }
    // ...
    default:
      return state
  }
}

したがっお、テヌブルず「モデル」ストアの間にあるべきではない䟝存関係を䜜成したこずがわかりたすモデルストアは、オブゞェクトの配列のコレクションキヌを䜿甚する必芁がありたす。 たた、dataTableは、「芪」レデュヌサヌの状態を操䜜したすが、操䜜するべきではありたせん。 そこでセレクタヌを䜿う必芁があるず思いたしたが、これを曞いおいる時点では、UIに衚瀺されるものを倉曎するためだけに倧きなストアを耇補しないように努めおいたした。

そのため、珟圚、これらの問題のいく぀かを解決するための再遞択ず、他のいく぀かの問題を解決するためのリファクタリング手法を孊ぶのに苊劎しおいたす。 最初のReduxコヌスは私を危険にさらすのに十分でした。 今、私はそれを正しく行う方法を孊びたいず思いたす。 :)

それがお圹に立おば幞いです。冗長すぎないでください。 明確で正盎なフィヌドバックを提䟛しようずしおいたす。

私を助けおくれるかもしれないどんな芪切な人にずっおも、私はすでにダンの別のコメントから/examples/real-world/reducersを芋぀けたした、そしお私は珟圚私が䞊で抂説した問題のいく぀かを䜜り盎しおいたす。 私が解決策を芋぀けたら、助けようずしお時間を無駄にしたくありたせんでした。

譊告をありがずう:)

redux-devtoolsを私のプロゞェクトに統合するこずは私にずっお倧きな苊痛でした..私はそこに䜕があり、それをどのように/い぀䜿甚するかを説明するeggheadシリヌズを高く評䟡しおいたしたそしお今でもそうしたす。 い぀䜕を䜿うべきかを説明しおいるPRを読みたしたが、hmr、transform 3、redux hotreloaderはreacthotreloaderなどずは違うものがたくさんあるので混乱したした。

䞊で抂説した問題のいく぀かに苊劎しおいる他の人のために、Reduxの定型文ず名前空間アクションのすべおではないにしおもほずんどを削陀できるプロゞェクトを䜜成したした。 ここでそれを参照しお

@granteagonこのカップルはアクションクリ゚ヌタヌに

アクション/リデュヌサヌの䜜成に加えおラッパヌたたは抜象化を䜜成するほずんどの人は、それらが垞に盎接結合されるず想定する傟向があるこずに泚意したした。 確かに、私のアプリでは、これたでのずころ、私のアクションの_ほずんど_には、察応する凊理ロゞックのチャンクが1぀だけありたすが、ツリヌの耇数の郚分を曎新する必芁がある堎所は確かにいく぀かありたす。

@ gaearon @ markeriksonそれはアクションクリ゚ヌタヌにレデュヌサヌを結合したす。ただし、90の確率で、それは問題ないか、望たしいこずです。残りの10の時間は、ただ手䜜業でコヌディングされたアプロヌチを䜿甚できたす。私はあなたが蚀ったこずを考え、将来の発展のためにそれを怜蚎したす。

@granteagon @gaearon

reduxrに䌌たロヌカル抜象化を䜿甚したので、ここに远加の結合はないず䞻匵したす。アクションずレデュヌサヌの間で11のマッピングを匷制するものはありたせん。同じアクションをリッスンする2぀の異なるスラむスに2぀のレデュヌサヌを含めるこずができたす。

const counterReducersA = {
  // this counter increments by 1 each time
  increment: (state, action) => state + 1
}

const counterReducersB = {
  // this counter increments by 2 each time
  increment: (state, action) => state + 2
}

const counterA = reduxr(counterReducersA, 0);
const counterB = reduxr(counterReducersB, 0);

const rootReducer = combineReducers({
  counterA: counterA.reducer,
  counterB: counterB.reducer
});

store.dispatch(counterA.action.increment());  // increments both counters

もちろん、同じものずいう名前の「レデュヌサヌ」関数が耇数ある堎合぀たり、同じアクションに応答する堎合、暗黙的に䞡方がアクションペむロヌドが特定の圢になるこずを「期埅」する必芁がありたす---これは完党に類䌌しおいたすバニラリダックスに2぀のレデュヌサヌがあり、どちらも同じtype定数を凊理するため、どちらも同じアクション圢状を期埅する必芁がありたす。

おそらく、 @ gaearon 、カップリングの意味を誀解したしたか

サンクの実装を瀺す前に、ミドルりェアなしで非同期フロヌを瀺すこずが圹立぀ず思いたす。

やや関連性がありたすが、ドキュメントはめちゃくちゃ圹に立ちたしたが、非同期フロヌペヌゞのこのステヌトメントは、埌から考えるず本圓に私を軌道に乗せたせんでした。「ミドルりェアがなければ、Reduxストアは同期デヌタフロヌのみをサポヌトしたす。」

@battaile それは本圓だからです:)ミドルりェアがなければ、非同期は完党にReduxの倖で発生する必芁がありたすしたがっお、ReactコンポヌネントなどのUIレむダヌで発生する可胜性がありたす。 store.dispatchを呌び出すずきはい぀でも、アクションはレデュヌサヌ関数に盎接進み、Goを枡さず、$ 200を収集せず、AJAX呌び出しの途䞭で停止したせん。

ストア゚ンハンサヌを䜿甚するず、 dispatchなどの関数を独自のバヌゞョンでラップできるため、 applyMiddlewareは、実際のストアのdispatch関数に到達する前に、「ミドルりェアパむプラむン」の抜象化を提䟛したす。 。 これは基本的に、暙準のReduxフロヌの_内郚_で、飛び出しお必芁な非同期凊理を実行できる抜け穎を提䟛したす。

したがっお、ミドルりェアがなくおも、完党に非同期の凊理を実行できたす...実際にReduxに関連するものずはたったく別の方法ですべおを実行する必芁がありたす。

それは本圓だからです:)

私はそれが間違っおいるずは蚀いたせんでした、私はそれが私を軌道から倖したず蚀いたした:)

私は次のようなこずをしたかったのですが、それは私ができなかったこずを意味しおいるように芋えたした

const mapDispatchToProps = (dispatch) => ({
  onclick(searchTerm) {
    dispatch(actions.requestOrders(searchTerm));

    return fetch('http://localhost:49984/Order/Search?search=' + searchTerm)
      .then(response => response.json()).then(response => {
        dispatch(actions.receiveOrders(searchTerm, response));
      })
      .catch((err) => {
        dispatch(actions.receiveOrdersError('An error occurred during search: ' + err.message));
      });
  },
});

これは簡単に醜くなる可胜性があるこずはわかっおいたすが、抂念的には芋るず䟿利だず思いたす。 たたは、少なくずも私の堎合はそうでした。

「ミドルりェアがなければ、Reduxストアは同期デヌタフロヌのみをサポヌトする」こずに同意したす。 誀解を招くです。

技術的には、「内郚」ず「倖郚」を区別したい堎合は、この蚘述は正しいかもしれたせんが、非同期を実行する唯䞀の方法はミドルりェアを远加するこずであるず人々に信じ蟌たせる堎合は、蚀い換えたり、詳しく説明したりできたす。それ。

ええ、違いは、非同期動䜜が技術的にはdispatch 「内郚」ではなく、コンポヌネントレベルで発生しおいるこずです。 マむナヌな違いですが、有効な違いです。

私は、この声明が技術的に正しくないず実際に䞻匵しおいる人はいないず思いたす。

@markerikson内偎ず倖偎の区別が重芁な具䜓的な䟋があるかどうか、興味がありたすか

1぀の䟋ずしお、チェヌン内のミドルりェアが非同期ミドルりェアでディスパッチされたサンクたたはpromiseなどを認識できるようにする堎合がありたす。 ミドルりェアが䜕をするかはわかりたせんが、そのようなものが必芁になるのは珟実的だず思いたす。

うヌん...具䜓的に「具䜓的な」䟋に぀いおはよくわかりたせん。 党䜓ずしお、「outside」ず「insie」の違いは、最初にdispatchを呌び出す前に発生するのか、それずも埌に発生するのかずいう問題です。 それが「倖偎」で「前」の堎合、React、Angular、たたはその他のものであるかどうかにかかわらず、すべおの非同期性ずロゞックはビュヌレむダヌにより密接に関連しおいたす。 「内郚」ず「埌」の堎合、非同期性ずロゞックはストアレベルにあり、ビュヌレむダヌに関連付けられおいたせん。

これは実際、今日のRedditのディスカッションで私が蚀おうずしおいたポむントの倚くです https 

「どのようなアクションをディスパッチし、い぀ディスパッチするのか」ずいう質問。 はビゞネスロゞックの䞭栞郚分であり、残りの半分は「これらのアクションに応じお状態を曎新するにはどうすればよいですか」です。 アクション管理がサンクやサガなどで行われおいる堎合、そのコヌドがReactコンポヌネント、Angularコントロヌラヌ、jQueryクリックハンドラヌ、Vueコンポヌネントむンスタンスなどによっお開始されたかどうかは実際には関係ありたせん。 コアロゞックはUIレむダヌの倖偎にあり、UIレむダヌは、ストアから必芁なデヌタを取埗しお衚瀺し、ナヌザヌ入力をアプリロゞック関数呌び出しに倉換する圹割を果たしたす。

぀たり、その意味では、「内郚」ず「倖郚」の問題は重芁だず思いたす。これは、ロゞックがアプリレベルずUIレベルのどちらで動䜜しおいるかを抂念的に区別するためです。

@markeriksonこの質問の行に私ず䞀緒にいおくれおありがずう。 議論の䜙地があるず思われるかもしれたせんが、これは「アプリレベル」ず「UIレベル」の違いであるずいう考えを少し抌し戻したいず思いたす。

泚䟿宜䞊、 thunkを䜿甚しお、実際にredux-thunkたたはredux-promiseであるかどうかにかかわらず、非同期ぞのアブリトラリヌミドルりェアアプロヌチを衚したす。

UIレむダヌは、ナヌザヌの操䜜をハンドラヌに接続するだけです。 誰かがボタンをクリックするず、UIは_some_ハンドラヌを呌び出すように蚭定されたす。 倚くの堎合、コンポヌネントはこれらのハンドラヌを小道具ずしお受け取りたす。たずえば、バむンドされたアクションの䜜成者です。 UIは、ハンドラヌを呌び出したずきに䜕が起こるかを認識しおいたせん---それを呌び出すだけです。

「ハンドラヌ」が関数をディスパッチするかミドルりェアによっお凊理される、非同期呌び出しを実行しおプレヌンアクションをディスパッチするかどうかはUIレむダヌに違いはありたせん--- UIは完党に䞍可知論的ですたたは少なくずも䞍可知論者になるこずができたす

サンクを䜿甚しおいるかどうかに関係なく、「アプリ」の倧郚分はこれらの「ハンドラヌ」にありたす。 兞型的なreact / reduxアプリでは、これらの「ハンドラヌ」は倚くの堎合、ある皮のアクションクリ゚ヌタヌです。 すべおの非同期のものをサンクずしお蚘述し、それらをディスパッチするこずができたす。 たたは、すべおの非同期のものを、匕数ずしおdispatchを受け入れる関数ずしお蚘述するこずもできたす。 コンポヌネントの芳点からは、 someHandler(dispatch)たたはdispatch(someHandler())いずれかです。たたは、バむンドされたアクションクリ゚ヌタヌが䞊から受け継がれる堎合は、どちらの堎合もsomeHandler()になりたす。 この違いをUIレむダヌから完党に隠すバヌゞョンのbindActionCreatorsを䜜成できたす。

redux-thunkを䜿甚しおアクションクリ゚ヌタヌで䜜成されたreact / reduxアプリケヌションを提䟛しおいただければ、UIレむダヌを_基本的に_倉曎せずに、redux-thunkを完党に亀換し、非ミドルりェアアプロヌチを䜿甚できたす。 泚 getStateをどこに/どのように泚入するかに぀いおは詳しく説明しおいたせんが、ここではそれが小さな詳现であるず_信じおいたす_。

そのため、「内郚」ず「倖郚」の区別が「アプリレベル」たたは「UIレベル」であるこずを理解するのに苊劎しおいたす。

私は議論に感謝したす、そしお私は私が吊定的に出くわさないこずを望みたす。

このコヌスは玠晎らしいです。 これを締めくくるず、人々はコヌスのコミュニティノヌトリポゞトリにコメントを送るこずができたす //github.com/tayiorbeii/egghead.io_redux_course_notes

たた、ダンが䞀緒に眮いた次のシリヌズもぜひチェックしおください https://egghead.io/courses/building-react-applications-with-idiomatic-redux

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡