状態管理ではなく関係と関連に着目した状態法則を考える
動的に解決する部分を減らして、静的に解決出来る部分を増やす
時空は四次元の概念であり、生のままでは人間の頭では理解できない 特定の時間軸の状態を引数としてUIを形成する空間「コンポーネント)を抽象化した コンポーネントごとに固有の時間軸と空間のスコープを扱える
Clojureでは状態に対するアイデンティティを持つ、と表現するらしい 状態にアイデンティティを与えることでUIの時空を分割統治できるようになった
クラス型のUIはミュータブルである
インスタンス変数を持つとレンダリングに利用される状態とインスタンス変数の値が一致しないケースがある
クラスはミュータブルであるため
レンダリングと状態のスナップショットは一位になる
状態が変化したら配下の空間はすべてて作り直される
関数型コンポーネントを利用していると状態の時間軸と空間は一致する
状態法則
コアとなるデータに対して利用者ごとにあればいいなと思うデータ表現を考える
与えられたデータ表現をそのまま扱わない
センテンスは関数にする
code:tsx
1. data = (serverState * clientState) // クライアントとサーバーの状態をかけあわせる式
2. UI = Component(data) // 純粋なレンダリング処理
この1. dataの式の組み合わせにより状態を算出する
入力のセットから出力が定まる(冪等&純粋)ため処理結果の予測可能性が高い
個々の式が正しければそこから導出される状態も正しい
状態遷移
現在の状態のパターンマッチングによって次の状態に遷移する
基本的にprev→nextの漸化式で表現する
3. コアの状態を導出可能な式にする
4. 式をつないで状態遷移パターンを定める
状態法則の表現例
上位概念に対する式
objectに対する式
1センテンスに対する式
objectまたはfield
依存変化をトラッキングする
関数の入出力を繋いだ式