【Jotai】Reactコンポーネントの外からアクセスしたい時

2023年11月17日 16:58

【Jotai】Reactコンポーネントの外からアクセスしたい時

useAtomなどはHookを使用しているため、コンポーネントの中でないと動かない。Atomの値を更新するグローバル関数を作りたかったので、アプリ内のどこからでもアクセスできるようにする必要があった。

結論→Storeを使えば簡単に実装できた!

目次
ライブラリ

ライブラリ

  • react@18.2.0
  • next@14.0.3
  • @mui/material@5.14.12
  • jotai@2.4.3

CreateStoreを使う

JotaiのStoreの説明はこちら。
https://jotai.org/docs/core/store

appRouterを使ってるので、Provider用にコンポーネントを切り分けます。
@/components/Atom/Provider.tsxを作成します。

'use client'
import { Provider as JotaiProvider, createStore } from 'jotai';
import { ReactNode } from 'react';

type Props = {
  children: ReactNode
}

export const store = createStore()

export default function Provider ({ children }: Props) {
  return <JotaiProvider store={store}>{children}</JotaiProvider>
}

layout.tsxに適用します。これで、storeを使ってアプリ内のどこからでもアクセスできるようになる。

<html lang="ja">
  <body>
    <Provider>
      {children}
    </Provider>
   </body>
</html>

コンポーネント外からアクセス

あとは、公式ドキュメントにあった通りget set sub 関数を使って取得したり更新したり…。

import { store } from '@/components/Atom/Provider'

store.get(somethingAtom)
store.set(somethingAtom, value)
store.sub(somethingAtom, () => {console.log(store.get(somethingAtom))})
まとめ

Jotaiはシンプルでいい!

プログラミング記事の一覧に戻る