たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

Redux

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したいか