Redux速習ガイド
「fluxアーキテクチャを実装するための状態管理ライブラリ」
状態管理?
GUIアプリケーションは色々な状態を管理することが多い
フォームの入力状態
データの取得状態
アプリの設定
etc…
このうち、コンポーネントに閉じている状態はコンポーネントの状態として扱えばいい
フォームの入力状態はまさにそれ
状態管理ライブラリを使うのは,Read視点で見るとアプリを木構造ではなくグラフで駆動させるため
React本体にはこれを実現する機能は存在しない
「アプリケーションは1つの巨大なJSONによって記述される」みたいな思想がありそう
JSONに色を付けるという作業が本質
ただ木構造だけでは不十分な場合があって,例えばTwitterのように,同じツイートが複数の場所で表示されるような場合
それに「いいね」したら,別の場所でも「いいね」が反映されていないと困る
これは木構造で表現した場合実現不可能だが,グラフならいける
非正規化 vs 正規化みたいな文脈で見られることも多いけど,これは極論を言えば木 vs グラフでもある
別の解法として,「今持っているデータを信じず,常に新しいデータを取りに行く」という戦略も考えられる
swrはデータ同士の関連性を知らないが,「どのデータが古くなっているか」は知っている 古くなったデータを読み出そうとするとき,古いデータを一応は表示するが,裏で新しいデータを取りに行く
TweetDeckみたいに同じ画面の別の場所に同じデータが表示される可能性がある場合,この戦略は破綻する Reduxストアのよくある使われ方としてAPIレスポンスの保存が行われているのは,木構造であるJSONにする過程でAPIレスポンスから失われたアプリケーションのデータが本来持っている関連性を復元するため
クライアントキャッシュのためだけじゃない,それだけでは本質が見えていない
Write視点で見ると,(おそらく)ロジックの分散のため
各コンポーネントが発生したイベントをストアに通知し,それに個々のSlice Reducerが反応するというモデルによって,ロジックを容易に分離して管理することができる
手続き型で単純に記述した場合に生まれがちなロジックの肥大化の回避
代償としてイベント駆動特有の複雑さが生まれる
このイベントには誰が反応すればいいの?
それをどうやって検証するの?
抜けはない?