みかづきブログ・カスタム

基本的にはちょちょいのほいです。

React Nativeで実装したiOSアプリでデータを永続化する(UserDefaults編) 📱



ことの発端

かつて、SwiftでiOSアプリを制作していた際、簡単なデータを永続化するときは UserDefaults を使っていました。

developer.apple.com

いまはExpoでiOSアプリを制作しているのですが、UserDefaultsをつかうにはどうすれば良いのか調べたところ、Settings経由でアクセスすれば良いことがわかったので、試してみました。


ざっくりとした使い方

インポート

import { Settings } from 'react-native';

値の取得

Settings.get(key);

値の保存

Settings.set({
  key: value
});

という感じです。

reactnative.dev

値の監視 もできるようですが、今回は触れずにいきます。


実装例

例えばアプリの起動回数を保持したい場合、

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 を検証しました。

blog.kimizuka.org