web-dev-qa-db-ja.com

React文字列以外の値を保存するネイティブAsyncStorage

AsyncStorageで文字列以外の値を保存する方法はありますか?たとえば、単純なブール値を保存します。

AsyncStorage.setItem('key', 'ok');

問題ありませんが、:

AsyncStorage.setItem('key', false);

動作しません..

31
Hasen

AsyncStorage React-native docs に基づいて、文字列しか保存できないのではないかと思います。

static setItem(key: string, value: string, callback?: ?(error: ?Error)
> => void) 

キーの値を設定し、完了時にコールバックを呼び出します。エラーがある場合はエラーを返します。 Promiseオブジェクトを返します。

サードパーティのパッケージを試してみてください。多分 これ

2016年2月11日編集

@Stinodesに感謝します。

文字列のみを保存できますが、オブジェクトと配列をJSONで文字列化して保存し、取得後に再度解析することもできます。

これはプレーンなオブジェクトインスタンスまたは配列でのみ適切に機能しますが、プロトタイプから継承したオブジェクトは予期しない問題を引き起こす可能性があります。

例 :

// Saves to storage as a JSON-string
AsyncStorage.setItem('key', JSON.stringify(false))

// Retrieves from storage as boolean
AsyncStorage.getItem('key', (err, value) => {
    if (err) {
        console.log(err)
    } else {
        JSON.parse(value) // boolean false
    }
})
51
G. Hamaide

文字列のみを保存できますが、JSONを使用してオブジェクトと配列を完全に文字列化し、ローカルストレージから引き出したときにそれらを再度解析できます。
ただし、これはプレーンObject- instancesまたは配列でのみ正しく機能します。

プロトタイプはJSONに解析されないため、プロトタイプから継承したオブジェクトは予期しない動作を引き起こす可能性があります。

ブール値(またはそのことに関する任意のプリミティブ)は、JSON.stringify、しかし。
JSONはこれらのタイプを認識し、両方の方法で解析できます。

JSON.stringify(false) // "false"
JSON.parse("false")   // false

そう:

// Saves to storage as a JSON-string
AsyncStorage.setItem('someBoolean', JSON.stringify(false))

// Retrieves from storage as boolean
AsyncStorage.getItem('someBoolean', function (err, value) {
    JSON.parse(value) // boolean false
}

// Or if you prefer using Promises
AsyncStorage.getItem('someBoolean')
    .then( function (value) {
        JSON.parse(value) // boolean false
    })


// Or if you prefer using the await syntax
JSON.parse(await AsyncStorage.getItem('someBoolean')) // boolean false

値を取得して解析した後(ブール値である必要はなく、オブジェクトでもかまいません。いずれのニーズも満たす場合)、状態に設定するか、それを使って何でもできます。

34
stinodes

AsyncStorageの「名前」キーに値を設定しました

AsyncStorage.setItem("name", "Hello");

キー「名前」から値を取得するには

AsyncStorage.getItem("name").then((value) => {
   console.log("Get Value >> ", value);
}).done();

出力は次のようになります。

'Get Values >> ', 'Hello'
8
BK19