2016-10-29 36 views
2

私はちょうどReduxのまわりで私の頭をラップしていると私はちょうどstateが減速に渡される方法についてのことで質問を実行したい:Redux - 状態はどのように減速機に渡されますか?

私はstateの構造はcombineReducers()機能により、そのキーことを決定されていることを理解しますこの関数内で定義すると、stateのさまざまなプロパティになります。

のみ特定のレデューサーに関連付けられているstateのサブセットがレデューサーに渡されますか?または、stateオブジェクト全体が渡されていますか?

Reduxでたくさんの「ああ」の瞬間を持っています...!

答えて

2

は、パラメータとしていくつかのレデューサーを取り、レデューサーを返します。 combineReducersによって生成された特定の減速機は、特定の減速機に割り当てられた状態の部分を通過するだけである。このようにして、各減量兵は国家のそれ自身の部分を完全に支配します。

しかし、あなたは異なった働きをすることができるcombineReducersの独自の種類を書くことができます。これは、特別なことは何もないと言うことです。combineReducers

減速機は、状態と動作を取り、何らかの方法で動作が適用された状態を返す関数です。それとも、その裁量で。

たとえば、Reduxでは、状態の別々のブランチが同じ(一連の)アクションを処理するが、ステートのその部分に意味をなされる異なる方法で処理するのが一般的です。各アクションはcombineReducersによってすべてのサブリデューサに渡され、各ブランチのリデューサに何かを行うか、何も行わない機会が与えられます。

ほとんどの一般的な使用法では、reducerは、combinedReducersに渡されるものや独自のレデューサーによって呼び出されるレデューサーなど、状態とサブレデューサーのスライスに単独で責任があり、サブステート/ブランチ。

しかし、あなた自身のレデューサーは、他のレデューサーに既に渡された同じ状態や、グローバルで利用可能なことなしに作成されたデータ状態。

これらのことは一般的ではありませんが、必要があり、それを前に進んで自信を持っていると思われる場合は、自分の考えているものを使用することをおすすめします。大きな力は大きな責任を伴います。

combineReducersは、一般的な使用例のヘルパー機能です。州の特定の支店に責任を負う単一の減量兵を作るのはおそらく最もきれいですが、状況を変えることが有益な場合があります。単一の減速機は、他の減速機を呼び出すことなく、入れ子になった複雑な物体を管理することができますが、親が扱いにくくなった場合、小さな減速機を使用して部品を処理します。

主なポイントは、レデューサーが常に状態と動作を取り、状態を返す純粋な関数であることを認識することです。これをどうやって起こさせるかは、あなた次第です。ほとんどの開発者はDanのReduxの例やegghead.ioの動画など、他のコードに見られる共通のパターンに従うことを選択します。

殴られたパスを踏むことは、既に審査されているため、開始するのが良い方法です。

しかし、同じ理由で、何かが行われた理由を知ることは常に重要です。開発者は時には、何か他のもののためのものであったか、あまりにもうまくいくとは考えられていなかったという例のために、必要以上に複雑なものにすることがあります。

read this by Dan。

+0

非常に役立つ回答@DDS!毎日、私はますます理解しています...私は減速機にそれ自身の 'state'のサブセットを処理させ、私が致命的なものに遭遇するかどうかを見る標準的なアプローチに従うことから始めます。私は、これが大半の状況でベストプラクティスであれば、それは私にはうまく合うだろうと思う。ありがとう。 –

+0

@ DDSの回答は素晴らしいです。 Reduxドキュメントの新しい[Structuring Reducers](http://redux.js.org/docs/recipes/StructuringReducers.html)セクションも読んでみてください。このセクションには、いくつかの有用なパターン、レシピ、よくある間違い。 – markerikson

関連する問題