jotaiのコードリーディング
core
vanilla.ts
atom間の計算処理の実装
contexts.ts
react context 及びこの中に保持するstoreを作るところ
scopeをkeyとしてmapで持つことでscopeを実現してる
なぜproviderが要らないか
そもそもreact contextは中身を操作したい場合にproviderを使う
providerを使ってないなら、default値を返す
mutableなstoreを扱いたいだけならproviderは要らない
useMutableSource.ts
これはreactでrfcで提案されてる
これを既存のhookでエミュレートしたもの
これを利用してるのは
createはcontexts.ts
useはuseAtom.ts
atom.ts
素直な実装で悩むところがあまりないはず
一つだけ気をつけるのが、readとwriteのとこ
configという変数をreturnしているのだが、config.read, config.write内では、config自分自身をget, setしている
ライブラリユーザとしてread, writeの関数を書いた経験があると無限ループしそうにみえる
実際は、自分自身をget, setする場合はうまく(想定どおり)動くようにvanilla.ts側で対応されてる
つまりここのコードはvanilla側を知らないと納得がしづらいところである