Recoil
facebookが作った状態管理ライブラリ
まだ出たばっかでベータ
かなり良さそう
そうそう、これが欲しかったんだよ感
データ側でboundingboxの計算とかができる
Rxっぽいといえばそうなのだが、Rxそんなに快適にこれ書けないし
Data-Flow Graph
Linkのとこ気になる
記事
まだexportされてないfamiliyについて言及があって良い
公式動画にidを引数にとってやるやつがあったが、それを公式側がよしなにやってくれるやつっぽい?
なんでkeyがいるのか
内部的にもすべてをkeyで管理してるから
jsのMapとかSetでkeyのstringで内部データを持っている
同等性を全部jsのオブジェクトじゃなくてkeyというstringでやってる
活かすも殺すも全部自分でハンドリングできるから?
callbackですら、数値でインクリメントしながらid持ってる
そのように設計しているからkeyが必要なわけだが
そうしないでjsのオブジェクトで管理することはできなかったのだろうか?
javascriptにはobjectにuniqueなidは無いわけだが
この記事、atomとselectorのreactivityの作り方が非常に参考になった
memo
RxJSのBehaviorSubjectである必要は多分ないと思う
atomのskip 1とかでいるのかなあ?
普通のevent emitterでなんとか事足りるのでは?
loaderのcontentsとpromiseは読みやすさ的には分けたいのは分かるが、分ける必要は多分ない
recoilもcontentsの中にT | Promise<T>が入ってる
行数もちょっと縮む
デフォルトでpromiseに対応しているのは利用者に優しい
これはloaderというオブジェクトでwrapしているからできる
selectorの読解が難関で、関数切り分けながら呼んで理解が追いついた
あとで解説を書きたい
そして、これはリアクティヴィティだけを実装していて、stateのtree?の差分検出に依る更新などは実装されてない
というか、いままでこの形のリアクティブな実装ってなかったのかな?
get のhelperで包むことでオブジェクト間の依存関係を追跡できる
型レベル、静的解析としては循環参照は検出できないと思う
そもそもatomやselectorは動的に構築ができる
それでも、循環参照発生時ではなく、オブジェクト作成時に判定ができるのでだいたいテスト実行でカバーできる?