我在React Native中将一些项目保存到AsyncStorage
,我正在使用chrome调试器和iOS模拟器。
如果没有原生反应,使用常规网络开发localStorage
,我就可以在localStorage
Chrome Debugger > Resources > Local Storage
项
任何想法如何查看React Native AsyncStorage
存储的项目?
答案 0 :(得分:31)
你可以使用reactotron我认为它有Async Storage资源管理器;) https://github.com/infinitered/reactotron
答案 1 :(得分:27)
React Native Debugger内置了此内容。
只需在RND控制台中调用showAsyncStorageContentInDev()
,您就可以看到应用存储空间的转储。
答案 2 :(得分:3)
我创建了一个帮助程序方法来将所有存储记录在单个对象中(例如,在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);
})
});
}
答案 3 :(得分:2)
使用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));
答案 4 :(得分:1)
以下应该有效,
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (error, stores) => {
stores.map((result, i, store) => {
console.log({ [store[i][0]]: store[i][1] });
return true;
});
});
});
答案 5 :(得分:1)
也许晚了,但是这些解决方案都不适合我。 在Android上,使用Android Studio打开文件资源管理器,然后转到 data / data / your_package_name 在内部,应该有一个名为 database 的文件夹,在内部的文件是 RKStorage 。
此文件是SQLite3文件,因此请获取您喜欢的SQLite资源管理器并进行探索。如果您想要一个,那么这个就可以了:DB Browser for SQLite
答案 6 :(得分:0)
我没有发现Reactotron启用了任何类型的漂亮打印,而且它也是残酷的潜伏所以我只是使用lodash编写了一个简单的函数。你也可以使用下划线。
假设您有所有密钥的静态映射......
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
})
})
}
它没有表现,但它解决了这个问题。
答案 7 :(得分:0)
您可以定义函数以使用异步和等待来获取所有键
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
}
}