注:私はRedux(Baobabも)のドキュメントを読み、グーグルとテストのかなりの部分を行いました。
Reduxアプリにストアが1つしかないことが強く推奨されているのはなぜですか?
私は、単一ストアのセットアップと複数ストアのセットアップの長所/短所を理解しています(このテーマについては、SOに関する多くのQ&Aがあります)。
IMO、このアーキテクチャ上の決定は、プロジェクトのニーズに基づいてアプリ開発者に属しています。では、なぜそれがとても強くReduxのため、ほとんど必須鳴らすのポイントに提案されている(何もかかわらず、複数の店舗を作るから私たちを停止していますか)?
編集:シングルストアに変換した後のフィードバック
多くの人が複雑なSPAと考えるものについてreduxで作業した数か月後、単一のストア構造で作業することは純粋に嬉しかったと言えます。
単一のストアと多くのストアが多くの多くのユースケースで根本的な問題である理由を他の人が理解するのに役立ついくつかのポイント:
- 信頼性があります。セレクターを使用してアプリの状態を調べ、コンテキストに関連する情報を取得します。必要なすべてのデータが1つのストアにあることがわかっています。それは、州の問題がどこにあり得るかについてのすべての質問を避けます。
- それは速いです:私たちの店は現在、100以上の減速機を持っています。その数でさえ、ごく一部のレデューサーのみが特定のディスパッチのデータを処理し、他のレデューサーは以前の状態を返します。巨大/複雑なストア(reducerのnbr)が遅いという主張は、かなり根拠のないものです。少なくともそこからパフォーマンスの問題が発生することはありません。
- デバッグしやすい:これは全体としてreduxを使用するのに最も説得力のある引数ですが、シングルストアとマルチストアのどちらにも当てはまります。プロセスで状態エラー(プログラマーのミス)が発生することになっているアプリをビルドする場合、それは正常です。PITAは、これらのエラーのデバッグに数時間かかる場合です。単一のストア(およびredux-logger)のおかげで、特定の状態の問題に数分以上費やすことはありませんでした。
いくつかのポインタ
reduxストアの構築における真の課題は、それをどのように構成するかを決定するときです。第一に、将来の構造変更はただの大きな痛みなのでです。第二に、それは主に使用方法を決定し、あらゆるプロセスのアプリデータをクエリするためです。ストアの構成方法については、多くの提案があります。私たちの場合、次のことが理想的であることがわかりました。
{
apis: { // data from various services
api1: {},
api2: {},
...
},
components: {} // UI state data for each widget, component, you name it
session: {} // session-specific information
}
このフィードバックが他の人に役立つことを願っています。
編集2-役立つストアツール
単一のストアを「簡単に」管理する方法を疑問に思っている方は、すぐに複雑になる可能性があります。ストアの構造的な依存関係/ロジックを分離するのに役立つツールがあります。
スキーマに基づいてデータを正規化するNormalizrがあります。次にid
、辞書と同様に、データを操作し、によってデータの他の部分をフェッチするためのインターフェースを提供します。
当時のNormalizrを知らなかったので、同じように何かを作りました。relational-jsonはスキーマを受け取り、テーブルベースのインターフェースを返します(データベースに少し似ています)。Relational-jsonの利点は、データ構造がデータの他の部分を動的に参照することです(基本的に、通常のJSオブジェクトと同様に、データを任意の方向にトラバースできます)。それはNormalizrほど成熟していませんが、私は数か月間、本番環境で正常に使用しています。