2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React Native】Jotaiによってグローバルステートを永続化する

Posted at

事象

ニュースアプリ開発において、ユーザーがクリップした記事をアプリを閉じたあとも保持する必要がありました。この記事では、Jotaiを使用してグローバルステートを永続化する方法を共有させていただきます。

対処法

以下のコードは、JotaiatomWithStorage を使用して、クリップした記事の状態を永続化します。createJSONStorage は、AsyncStorage と連携してデータをJSON形式で保存・取得します。Jotai のGitHubディスカッションによると createJSONStorage は型安全ではないため、回避策として、いったん any を指定しております。以下によって生成する clipAtom を必要な箇所にて useAtom によって呼び出します。

clip.ts
import AsyncStorage from '@react-native-async-storage/async-storage';
import { atomWithStorage, createJSONStorage } from 'jotai/utils';

import { Clip } from '../types/clip';

const storage = createJSONStorage<any>(() => AsyncStorage);

export const clipAtom = atomWithStorage<Clip>('clip', [], storage);

npx expo startによってExpoプロジェクトを起動し、XcodeによってiOSを動作確認する際にcommand + Rによって再起動できます。再起動によってアプリの状態がリセットされ、永続化されたデータが正しく読み込まれているかを確認することができます。それによってアプリを閉じたあともクリップした記事が保持されてるかどうか確認できます。

参照

自らの備忘録のために投稿してますが、なにかお役に立てましたら幸いです!:clap:
また、なにか間違ってましたらご指摘いただけますと幸いです!:pray:

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?