React NativeでAsyncStorage
にいくつかのアイテムを保存し、chromeデバッガーとiOSシミュレーターを使用しています。
ネイティブのリアクションなしで、通常のWeb開発localStorage
を使用して、Chrome Debugger > Resources > Local Storage
の下に格納されたlocalStorage
アイテムを見ることができました
React Native AsyncStorage
保存済みアイテムを表示する方法はありますか?
あなたはreactotronを使用することができます、私はそれが非同期ストレージエクスプローラを持っていると思います;) https://github.com/infinitered/reactotron
React Native Debugger にはこれが組み込まれています。
RNDコンソールでshowAsyncStorageContentInDev()
を呼び出すだけで、アプリのストレージのダンプを確認できます。
以下が機能するはずです、
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (error, stores) => {
stores.map((result, i, store) => {
console.log({ [store[i][0]]: store[i][1] });
return true;
});
});
});
bluebird でこれを行うことができます:
const dumpRaw = () => {
return AsyncStorage.getAllKeys().then(keys => {
return Promise.reduce(keys, (result, key) => {
return AsyncStorage.getItem(key).then(value => {
result[key] = value;
return result;
});
}, {});
});
};
dumpRaw().then(data => console.log(data));
1つのオブジェクトにすべてのストレージを記録するヘルパーメソッドを作成しました(たとえばReactotronで記録する方がクリーンです)。
import AsyncStorage from '@react-native-community/async-storage';
export function logCurrentStorage() {
AsyncStorage.getAllKeys().then((keyArray) => {
AsyncStorage.multiGet(keyArray).then((keyValArray) => {
let myStorage: any = {};
for (let keyVal of keyValArray) {
myStorage[keyVal[0]] = keyVal[1]
}
console.log('CURRENT STORAGE: ', myStorage);
})
});
}
Reactotronがあらゆる種類のプリティプリンティングを有効にしているとは思っていませんでした。アンダースコアも使用できます。
すべてのキーの静的マッピングがあると仮定します...
const keys = {
key1: 'key1',
key2: 'key2'
}
export function printLocalStorage() {
_.forEach(keys, (k, v) => {
localStore.getAllDataForKey(v).then(tree => {
console.log(k) // Logs key above the object
console.log(tree) // Logs a pretty printed JSON object
})
})
}
パフォーマンスは良くありませんが、問題は解決します。
Asyncおよびawaitを使用して、すべてのキーを取得する関数を定義できます
getAllkeys = () => {
return new Promise( async (resolve, reject) => {
try {
let keys = await AsyncStorage.getAllKeys();
let items = await AsyncStorage.multiGet(keys)
resolve(items)
} catch (error) {
reject(new Error('Error getting items from AsyncStorage: ' + error.message))
}
});
}
somefunc = async () => {
try {
var items = await getAllkeys();
var someItems = items.filter(function (result, i, item) {
// do filtering stuff
return item;
});
// do something with filtered items
} catch (error) {
// do something with your error
}
}