🚧 AsyncStorage
已过时。 Use one of the community packages instead.
AsyncStorage
是一个简单的、异步的、持久化的 Key-Value 存储系统,它对于 App 来说是全局性的。可用来代替 LocalStorage。
我们推荐您在 AsyncStorage 的基础上做一层抽象封装,而不是直接使用 AsyncStorage。
在 iOS 上,AsyncStorage
在原生端的实现是把较小值存放在序列化的字典中,而把较大值写入单独的文件。在 Android 上,AsyncStorage
会尝试使用RocksDB,或退而选择 SQLite。
本模块的 JS 代码提供了对原生实现的一个封装,以提供一个更清晰的 JS API、抛出真正的Error
对象,以及简单的单项对象操作函数。每个方法都会返回一个Promise
对象。
导入AsyncStorage
库:
import { AsyncStorage } from 'react-native';
保存数据:
_storeData = async () => {
try {
await AsyncStorage.setItem(
'@MySuperStore:key',
'I like to save it.'
);
} catch (error) {
// Error saving data
}
};
读取数据:
_retrieveData = async () => {
try {
const value = await AsyncStorage.getItem('@MySuperStore:key');
if (value !== null) {
// We have data!!
console.log(value);
}
} catch (error) {
// Error retrieving data
}
};
文档
方法
getItem()
static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)
读取key
字段并将结果作为第二个参数传递给callback
。如果有任何错误发生,则会传递一个Error
对象作为第一个参数。返回一个Promise
对象。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
key | string | 是 | 要读取的字段名 |
callback | ?(error: ?Error, result: ?string) => void | 否 | 读取完成后的回调函数(不建议使用) |
setItem()
static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
将key
字段的值设置成value
(注意 value 必须是字符串值,非字符串数据必须先序列化为字符串),并在完成后调用callback
函数。如果有任何错误发生,则会传递一个Error
对象作为第一个参数。返回一个Promise
对象。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
key | string | 是 | 要写入的字段名 |
value | string | 是 | 要写入key 字段的值 |
callback | ?(error: ?Error) => void | 否 | 发生错误时的回调函数 |
removeItem()
static removeItem(key: string, [callback]: ?(error: ?Error) => void)
删除一个字段。返回一个Promise
对象。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
key | string | 是 | 要删除的字段名。 |
callback | ?(error: ?Error) => void | 否 | 发生错误时的回调函数 |
mergeItem()
static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
假设已有的值和新的值都是字符串化的 JSON,则将两个值合并。返回一个Promise
对象。
注意: 还没有被所有原生实现都支持。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
key | string | 是 | 要合并更新的字段名。 |
value | string | 是 | 要合并到key 字段上的新值。 |
callback | ?(error: ?Error) => void | 否 | 发生错误时的回调函数。 |
示例:
let UID123_object = {
name: 'Chris',
age: 30,
traits: { hair: 'brown', eyes: 'brown' }
};
// 只需定义新增或是修改的数据
let UID123_delta = {
age: 31,
traits: { eyes: 'blue', shoe_size: 10 }
};
AsyncStorage.setItem(
'UID123',
JSON.stringify(UID123_object),
() => {
AsyncStorage.mergeItem(
'UID123',
JSON.stringify(UID123_delta),
() => {
AsyncStorage.getItem('UID123', (err, result) => {
console.log(result);
});
}
);
}
);
// Console log result:
// => {'name':'Chris','age':31,'traits':
// {'shoe_size':10,'hair':'brown','eyes':'blue'}}
clear()
static clear([callback]: ?(error: ?Error) => void)
清空全部的AsyncStorage
数据,不论来自什么库或调用者。通常不应该调用这个函数——使用removeItem
或者multiRemove
来清除你自己的 key。返回一个Promise
对象。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
callback | ?(error: ?Error) => void | 否 | 发生错误时的回调函数 |
getAllKeys()
static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)
获取所有本应用可以访问到的数据,不论来自什么库或调用者。返回一个Promise
对象。
参数:
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
callback | ?(error: ?Error, keys: ?Array<string>) => void | 否 | 完成后的回调函数。 |
flushGetRequests()
static flushGetRequests(): [object Object]
清除所有进行中的查询操作。