ことの発端
かつて、SwiftでiOSアプリを制作していた際、簡単なデータを永続化するときは UserDefaults を使っていました。
いまはExpoでiOSアプリを制作しているのですが、UserDefaultsをつかうにはどうすれば良いのか調べたところ、Settings経由でアクセスすれば良いことがわかったので、試してみました。
ざっくりとした使い方
インポート
import { Settings } from 'react-native';
値の取得
Settings.get(key);
実装例
例えばアプリの起動回数を保持したい場合、
import { useEffect, useState } from 'react'; import { Settings, Text } from 'react-native'; export default function App() { const [ count ] = useState(Settings.get('count') || 0); // UserDefaultsに保存されたcountの取得 useEffect(() => { Settings.set({ count: count + 1 }); // countをインクリメントして保存 }, []); return <Text>{ count }</Text>; // countの表示 }
という感じで起動回数の保持と表示が実現できます。
注意事項
UserDefaultsに保存した内容は暗号化されないので、保存する内容が適切か検討する必要がありますが、かなり手軽に使えるのでおすすめです。
ただし、UserDefaultsではiOSのみしか対応できないので、Android、Webにも対応したい場合は、 別の実現方法を検討する必要があります。
追記
iOSの他に、Android、Expo Go、macOS、Web、Windowsにも対応できる react-native-async-storage を検証しました。