👽
Jotaiの元になったuse-atomを作り直してJotaiの簡易版にしてみた、学習用にいいかも!?
use-atomというのは、もともとrecoilに刺激されて作ったライブラリです。初めは簡単に作れるだろうと思ったら、思いのほか難しいことが分かって、一度はあきらめた感じになりました。
その後、再挑戦してゼロから作ったものがjotaiです。当初のuse-atomのAPIよりもjotaiのAPIの方がrecoilに似せて作ってあったりします。しかし、その後、jotaiとrecoilは細かいところで色々違いがあることがわかってきました。初見のAPIが似ているだけとも言えるかもしれません。その辺りの話はまだうまくまとめられていないのでそのうち。
ところで、jotaiのソースコードはそれなりに複雑です。主にasyncの対応によるところが大きいです。asyncさえなければもっとスッキリ作れるはずとの思いもあり、use-context-selectorベースのuse-atomを再度作り直してみました。
use-atomにjotaiのAPIをバックポートしたので、新しいuse-atomはjotai APIのサブセットになっています。細かい違いもいくつかありますが、一番大きい違いはasyncつまりsuspense対応していないことです。副作用のあるwrite関数も書けません。実はそっちの方が難しくかつ大きな問題だったりします。
結果的に、コードはそこそこスッキリしたので、実用に耐えるものに仕上げることもできるかもしれません。が、今のところは、jotaiのサブセットの学習用の位置付けで捉えています。もし、jotaiのコードを読んだり、読もうとしたことがある方はぜひuse-atomも眺めてみてください。
Discussion