Redux is a predictable state container for JavaScript apps
概要
Reduxが欲しいもの: 予測可能性/predictability
(statet=0, action1, 2, ..., n, reducers)
が与えられれば、t=0からt=nまでの全てのstateが予測・再現できる.
∵ RootRuducer(statet, actiont) == statet+1
予測可能性とは
予測可能性という性質が可能にするもの.
- stateの一括保存と復帰(statenを保存し読むだけ)
- state込みのSSR (statenを読んでレンダリングしたhtmlを返すだけ)
- デバック時の全アクション再現 (statet=0と全アクションを保存して送るだけ)
- undo/redo (statet-1の保存/undoとactiontの保存/redoだけ)
なぜpredictabilityを実現できているのか
predictabilityをもたらす3つの性質
State is read-only
状態の操作を"action"という実体に切り出し。actionのみによる操作
=> 記録可能な操作
action == reducer+arguments(RPCのcall依頼objectとまったく一緒. 関数名+arguments)
Single source of truth
Redux doesn't have a Dispatcher or support many stores.
...
there is just a single store with a single root reducing function.
ref
stateはSSoTとして1箇所に集約
=> 順序関係が明確に(分散stateでも時刻flag立てればできる)
Changes are made with pure functions
stateのmutationを禁止
=> statetは常にstatet。「なぜかstatet+1に変化している」心配をしなくていい.
テーマ: どのstateをRedux/SSoTで管理するか
すべては開発者の判断。いくつかの参考指標はある。
There is no “right” answer for this. ... Using local component state is fine. Redux - Redux FAQ: Organizing State
指標:
- stateが利用される範囲
- cache/restoreしたいか