2017-05-04 14 views
3

私はElm-comunityとElmから来て、すべてのアプリケーションはその見解、モデル、状態を持っており、基本的にはIMOと同様のアプローチを採用しています。Redux - One対複数の減速機

とにかく、私は自分自身が複数のレデューサーのアイデアに苦しんでいることがわかりました。 Elmでは、すべてのアクション(メッセージ)、別のファイル「反応」(ビュー)、状態(モデル)のための別のファイル、およびすべてのレデューサー(更新)のための別々のファイルを作成するために使用されています。

可能なすべてのアクションは、内部でカバーされます。アップデートファイルとアップデートファイルは、複数のファイルに分散することができず、すべてのロジックが1か所に保持されます。

一方Reduxは、reducersのための複数の別々のファイルを作成し、後でcombineReducersと組み合わせることを奨励しています。これは非常に混乱していて、はるかに劣っています。

私が物事を正しくするならば、各レデューサーはそれが「責任を負う」部分を得て、それを使って何かを行うことができ、異なるレデューサーは他のレデューサーの他の状態特性/特性にアクセスすることができません。 IMOこれを行うの

短所:減速Aから

  1. 機能は、減速機Bからの情報についての情報を必要とするかもしれないが、このためにアクセスすることはできません。
  2. ファイルが多いほど、混乱と意図しないエラーが発生します。
  3. 不要なコード分割。 ...

コード分割の賛否は何ですか?ここに何も表示されません。

答えて

5

私はこのスレッドダンアブラモフ監督スポットの前に説明しようとして

短所:-)別の驚くべき答え書き込みます:減速機Aから

機能は、減速機Bからの情報についての情報を必要とするかもしれないが、しかし、このためアクセスできません。

この問題は実際には起こりません。これは、レデューサーをどのように組み合わせるかはあなた次第です。レデューサーが状態ツリーの一部にしか関心がない場合、combineReducersはその部分を受信することを確実にします。しかし、もっと状態が必要な場合は、この特定の減速機を状態全体を受け取るように適用します。

アプリケーション全体には、状態全体とすべてのアクションを処理する1つの縮小機能しかありませんが、アプリケーションコードをある時点でトピック関連モジュールに分割したいと思うでしょう。小さなトピック関連の減速機を書く方が簡単で、それらを1つにまとめることができます。 combineReducersは、必要なときに便利に行うことができるヘルパーです。

  1. 多くのファイルが混乱し、意図しないエラーが発生します。
  2. 不要なコード分割。 ...

コードを分割するタイミングまで。無関係の機能を別のファイルに保存するのが好きです。たとえば、私のWebアプリケーションにチャットモジュールがある場合は、おそらくchatパッケージを作成し、その中にチャット関連のコード(ビュー、一連のアクション、およびこれらのアクションを理解する減速機)を配置します。


プロへの移動:それは、再利用可能なアプリでは本当によく働くので

combineReducersに便利です。例えば、私はコメントを扱うモジュールを書くことができます...それの一部のような減速になります。

const initialState = { 
    commentList: [], // list of { author, text, upvotes } 
    commentingAllowed: true, 
} 

function commentReducer(state, action) { 
    if (typeof state === 'undefined') { 
    return initialState; 
    } 
    switch (action.type) { 
    // ... 
    } 
} 

が、自分のアプリケーションの実際の状態は次のように、より複雑になることがあります:

{ 
    currentArticle: { 
    title: "Some article", 
    published: "2017-04-05", 
    author: "someone", 
    comments: { 
     commentList: [], 
     commentingAllowed: true, 
    } 
    } 
} 

コメントの状態はcurrentArticleにネストされていますが、私のコメントアプリ(具体的にはcommentReducerは記事全体の概念を認識していません!)ので、状態全体を受け取ることは望ましくありません。私は、この減量主体が、そのコメントに対応する国家の部分だけを受け取るようにしたい。

私は一度に多くの記事を持っている可能性があることに注意してください。レデューサーを巧みに組み合わせることで、コメントアプリの複数の「インスタンス」を持つことができ、それぞれは独自の小さな状態を処理します。これには、combineReducers単独よりも少しスマートなグルーコードが必要ですが、減速機がアプリケーション状態の特定の部分、つまり懸念の分離を必要とするのが当然の場合の状況を示しています。

関連する問題