React状態管理ライブラリ Jotai の便利関数の紹介 #JotaiFriends
Jotai入門がまだの方はこちらからぜひ!
はじめに
Core APIは最小限に提供されていますが、jotai/utilsからは便利な関数が提供されています。
ここではいくつかをピックアップし簡単に紹介していきたいと思います。
全てのutilsはこちらのページからどうぞ。
useUpdateAtom
以下のようにuseAtomを使うとタプルの0番目であるステートを無視しているものの、useAtomとしてはstateを監視するのでupdate()するとそのコンポーネントはレンダリングが走ります。
const [, update] = useAtom(anAtom);
このように、コンポーネント内においてstateは使わずupdate()だけ実行する場合にuseUpdateAtom()
が利用できます。
上記は以下のように書くことが出来ます。
const update = useUpdateAtom(anAtom);
atomWithObservable
rxjsのようにobservableなものからatomを作ることが出来ます。
これを使う場合、<Suspense>
でラップしたコンポーネント(ツリー)内で使う必要があります。
import { atomWithObservable } from 'jotai/utils';
import { interval } from 'rxjs';
const counterSubject = interval(1000).pipe(map((i) => `#${i}`));
const counterAtom = atomWithObservable(() => counterSubject);
atomWithStorage
Reactの場合は、localStorageやsessionStorage、React Nativeの場合だとAsyncStorageを使った永続化のために使用します。
import { atomWithStorage } from 'jotai/utils';
const darkModeAtom = atomWithStorage('darkMode', false); // 第1引数はkey, 第2引数は初期値
atomWithHash
atomWithStorageのように永続化をURLハッシュで行います。
ハッシュを書き換えるとatomの値も変わり、atomの値が書き換わるとハッシュも書き換わります。
atomFamily
RecoilのatomFamilyのように使いたいという提案から用意されました。(issue #23)
動作を似せるためには、以下のようにする必要があります。
atomFamily()は、paramを受け取ってatomを返す関数を作ります。既に作られたatomだった場合はキャッシュを返します。
Recoil勢向けなAPIですね。
import { atom } from 'jotai'
import deepEqual from 'fast-deep-equal'
const fooFamily = atomFamily((param) => atom(param), deepEqual)
useHydrateAtoms
NextjsのようにSSRするアプリのためにuseHydrateAtoms
が用意されています。
例えばサーバー側でuserAtomの値が'yamamoto'となったとします、もしhydrateする仕組みがないとクライアントでは'(no name)'のままとなります。
useHydrateAtoms([[userAtom, userFromServer]])
のように[atom, value]
の組み合わせで適用できます。
import { atom, useAtom } from 'jotai'
import { useHydrateAtoms } from 'jotai/utils'
const userAtom = atom({ name: '(no name)' })
const UserPage = ({ userFromServer }) => {
useHydrateAtoms([[userAtom, userFromServer]])
const [user] = useAtom(userAtom)
}
おわりに
基本的にはcore APIで出来ることがutilsにあるようです。
今回はいくつか抜粋して簡易的にみましたが、今後はサンプルコード付きで丁寧に触っていく機会を設けたいと思います。
概要を把握するならutilsのページを眺めるだけである程度はつかめるかと思います。数もそこまで多くはないので、軽く概要を掴んで後で必要になったら詳しく知っていく、で問題ないでしょう。
使用頻度高いのはuseUpdateAtom
でしょうか。
Jotaiの紹介特集について
この記事はJotai FriendsによるJotai紹介特集記事の1つです。記事一覧はこちらからどうぞ。
Jotai Friendsとは
いちJotaiファンとして、エンジニアの皆さんにもっとJotaiを知ってもらって使ってもらいたい、そんな思いから立ち上げたのがJotai Friendsです。
現在まだまだ準備中ですが今後ともよろしくお願いします!
(ご興味持っていただけた方は是非jotaifriends.devにてEメールアドレスのご登録をお願いします🙏)
Jotai Friends のテックブログです。 React状態管理ライブラリJotai(jotai.org)を新たな選択肢に。 エンジニアの皆さんが安心してJotaiを採用できるように支援します。 Powered by twitter.com/t6adev
Discussion