2015-11-08 14 views
20

私はcombineReducersを使用してすべてのレデューサーを組み合わせてストアを作成していますが、どのビューからディスパッチされたアクションでも、すべてのレデューサーが呼び出されてアクションタイプを確認できますか?アクションがディスパッチされると、すべてのレデューサーが呼び出されますか?

または私は完全にReduxの設計原理を理解していない?

答えて

11

はい、それは正しいです。

あなたは小道具Aは、状態に依存していると言うことができるただし、この動作を最適化する必要が一つの選択肢(Reduxのドキュメントから提案)「再選択」を使用することですhttps://github.com/rackt/reselect

が再選択は基本的に、メモ化セレクタを作成することができます状態Bまたは状態Cが変化した場合にのみ、小道具Aを再計算する。

これは引き続きすべてのレデューサーが実行されることに注意してください(また、switchステートメントを実行してアクションが適用されるかどうかを確認してください)。しかし、再選択を使用すると、毎回変更をトリガーするのではなく、変更が効果がなかった場合でもReactがすべてを再レンダリングするのではなく、その状態に影響する実際の変更があった場合にのみ、それはどこか無関係だったからです。

+0

実際に私はreduxでvue.jsを使用しています。皆さんの提案に感謝します。 – elaijuh

+4

あなたは歓迎です:)しかし、すべてのレデューサーが呼び出されていますが、実際にはスイッチのステートメントがチェックされ、そのアクションを処理するレデューサーのみが何らかの作業を行い、他のすべては何もしないので、パフォーマンスの問題ではありません。現代のJSは大きなスイッチ文をO(1)アクセス時間を持つジャンプテーブルに最適化するので、多くの回のアクションがマッチしなくても、リデューサーの大きなswitch文の評価について心配する必要はありません任意の条件。 – luanped

+0

レデューサー内のアクションオブザーバーパターンはスイッチではなく、オブザーバーパターンの完全な例です –

3

はい - アクションをディスパッチするとすべてのレデューサーが呼び出されます。それに素晴らしい副作用が1つあります。アクションが見つからない場合、すべてのレデューサーがデフォルトの状態を返すので、単一のアクションで初期状態が設定されます。

私はまだ試していませんが、複数のレデューサーに影響を及ぼす単発的な作用をストアの2つの異なる部分で状態を変えることが有益なことがあります。

@luanpedとして再選択を追加すると、多くの病気の結果が出る可能性があります。

私の現在のスタックである:

  • Reduxの状態、行動管理のため
  • は、ワークフローを再選択の追加とそれを作るビュー

反応再選択データ変換層用

  • 先週私に起こった最高のことでした。

  • +0

    '多くの病気の結果 'は'私に起こった最高のもの'と反対に聞こえるので、 '再選択 '? – elaijuh

    +0

    邪悪なものやひねったものにうんざりする===しかし、予期せぬことです...そして、はい、再選択はワークフローにとって非常に強力なものです。 – Kocur4d

    +0

    @ Kocur4dあなたがあなたの初期状態のセットアップを取得するアクションが見つからない場合は、すべてのレデューサーがデフォルトの状態を返すとおっしゃいますか?あなたはあなたのセレクタがあなたの状態に依存するmomoized関数を返すことができます。シングルアクション '? – Reza

    関連する問題