React Native - 如何查看 AsyncStorage 中存储的内容?
React Native - How to see what's stored in AsyncStorage?
我在 React Native 中将一些项目保存到 AsyncStorage
,并且我正在使用 chrome 调试器和 iOS 模拟器。
在没有 React Native 的情况下,使用常规 Web 开发 localStorage
,我能够看到 Chrome Debugger > Resources > Local Storage
下存储的 localStorage
个项目
知道如何查看 React Native AsyncStorage
存储的项目吗?
使用 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));
你可以使用 reactotron 我认为它有异步存储资源管理器 ;)
https://github.com/infinitered/reactotron
React Native Debugger 内置了这个。
只需在 RND 控制台中调用 showAsyncStorageContentInDev()
,您就可以看到应用存储的转储。
我没有发现 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
})
})
}
虽然性能不佳,但可以解决问题。
以下应该有效,
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (error, stores) => {
stores.map((result, i, store) => {
console.log({ [store[i][0]]: store[i][1] });
return true;
});
});
});
我创建了一个辅助方法来将所有存储记录在一个对象中(例如在 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);
})
});
}
您可以使用 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
}
}
可能晚了,但是 none 这些解决方案适合我。
在 android 上,使用 Android Studio 打开文件资源管理器,然后转到 data/data/your_package_name
在里面你应该有一个名为 database 的文件夹和一个文件 RKStorage.
此文件是一个 SQLite3 文件,因此请获取您最喜欢的 SQLite 资源管理器并进行探索。如果你想要一个,这个就可以了:DB Browser for SQLite
反应本机调试器
右键单击免费 space
我有一个 expo snack 显示此内容并执行“加载”。因此,它对于转储内容并将其存储到文件并稍后加载它很有用。
这是零件。
const keys = await AsyncStorage.getAllKeys();
const stores = await AsyncStorage.multiGet(keys);
const data = stores.reduce(
(acc, row) => ({ ...acc, [row[0]]: row[1] }),
{}
);
// data now contains a JSONable Javascript object that contains all the data
这会从 JSON 字符串修改 AsyncStorage 中的数据。
// sample is a JSON string
const data = JSON.parse(sample);
const keyValuePairs = Object.entries(data)
.map(([key, value]) => [key, value])
.reduce((acc, row) => [...acc, row], []);
await AsyncStorage.multiSet(keyValuePairs);
我在 React Native 中将一些项目保存到 AsyncStorage
,并且我正在使用 chrome 调试器和 iOS 模拟器。
在没有 React Native 的情况下,使用常规 Web 开发 localStorage
,我能够看到 Chrome Debugger > Resources > Local Storage
localStorage
个项目
知道如何查看 React Native AsyncStorage
存储的项目吗?
使用 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));
你可以使用 reactotron 我认为它有异步存储资源管理器 ;) https://github.com/infinitered/reactotron
React Native Debugger 内置了这个。
只需在 RND 控制台中调用 showAsyncStorageContentInDev()
,您就可以看到应用存储的转储。
我没有发现 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
})
})
}
虽然性能不佳,但可以解决问题。
以下应该有效,
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (error, stores) => {
stores.map((result, i, store) => {
console.log({ [store[i][0]]: store[i][1] });
return true;
});
});
});
我创建了一个辅助方法来将所有存储记录在一个对象中(例如在 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);
})
});
}
您可以使用 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
}
}
可能晚了,但是 none 这些解决方案适合我。 在 android 上,使用 Android Studio 打开文件资源管理器,然后转到 data/data/your_package_name 在里面你应该有一个名为 database 的文件夹和一个文件 RKStorage.
此文件是一个 SQLite3 文件,因此请获取您最喜欢的 SQLite 资源管理器并进行探索。如果你想要一个,这个就可以了:DB Browser for SQLite
反应本机调试器
右键单击免费 space
我有一个 expo snack 显示此内容并执行“加载”。因此,它对于转储内容并将其存储到文件并稍后加载它很有用。
这是零件。
const keys = await AsyncStorage.getAllKeys();
const stores = await AsyncStorage.multiGet(keys);
const data = stores.reduce(
(acc, row) => ({ ...acc, [row[0]]: row[1] }),
{}
);
// data now contains a JSONable Javascript object that contains all the data
这会从 JSON 字符串修改 AsyncStorage 中的数据。
// sample is a JSON string
const data = JSON.parse(sample);
const keyValuePairs = Object.entries(data)
.map(([key, value]) => [key, value])
.reduce((acc, row) => [...acc, row], []);
await AsyncStorage.multiSet(keyValuePairs);