【React Native】文件翻譯閱讀紀錄 - APIs - AsyncStorage
Facebook Open Source React Native |
AsyncStorage
AsyncStorage是一個簡單的,未加密的,異步的,持久的鍵值存儲系統,對應用程序來說是全局的。它應該用來代替LocalStorage。
建議您在AsyncStorage之上使用抽象而不是AsyncStorage直接用於除了輕量級用途以外的任何抽象,因為它全局運行。
在iOS上,AsyncStorage由本機代碼支持,該代碼將小值存儲在序列化字典中,將較大值存儲在單獨的文件中。在Android上,AsyncStorage將根據可用內容使用RocksDB或SQLite。
AsyncStorage JavaScript代碼是一個簡單的外觀,提供清晰的JavaScript API,真正的Error對象和簡單的非多功能。 API中的每個方法都返回一個Promise對象。
導入AsyncStorage庫:
建議您在AsyncStorage之上使用抽象而不是AsyncStorage直接用於除了輕量級用途以外的任何抽象,因為它全局運行。
在iOS上,AsyncStorage由本機代碼支持,該代碼將小值存儲在序列化字典中,將較大值存儲在單獨的文件中。在Android上,AsyncStorage將根據可用內容使用RocksDB或SQLite。
AsyncStorage JavaScript代碼是一個簡單的外觀,提供清晰的JavaScript API,真正的Error對象和簡單的非多功能。 API中的每個方法都返回一個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('TASKS');
if (value !== null) {
// We have data!!
console.log(value);
}
} catch (error) {
// Error retrieving data
}
}
Methods
getItem
setItem
removeItem
mergeItem
clear
getAllKeys
flushGetRequests
multiGet
multiSet
multiRemove
multiMerge
參考
Methods
getItem()
static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)
獲取鍵的項目並在完成時調用回調。返回 Promise 對象。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
key | string | Yes | 要獲取的項的鍵。 |
callback | ?(error: ?Error, result: ?string) => void | No | 如果找到或將出現任何錯誤,將調用結果的函數。 |
setItem()
static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
設置鍵的值並在完成時調用回調。返回 Promise 對象。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
key | string | Yes | 要設置的項的鍵。 |
value | string | Yes | 為鍵設置的值。 |
callback | ?(error: ?Error) => void | No | 將調用任何錯誤的函數。 |
removeItem()
static removeItem(key: string, [callback]: ?(error: ?Error) => void)
刪除鍵的項目並在完成時調用回調。返回 Promise 對象。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
key | string | Yes | 要刪除的項的鍵。 |
callback | ?(error: ?Error) => void | No | 將調用任何錯誤的函數。 |
mergeItem()
static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
將現有鍵值與輸入值合併,假設兩個值都是字符串化JSON。返回Promise對象。
注意:所有本機實現都不支持此功能。
參數:
注意:所有本機實現都不支持此功能。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
key | string | Yes | 要修改的項的鍵。 |
value | string | Yes | 要為鍵合併的新值。 |
callback | ?(error: ?Error) => void | No | 將調用任何錯誤的函數。 |
例:
let UID123_object = {
name: 'Chris',
age: 30,
traits: {hair: 'brown', eyes: 'brown'},
};
// You only need to define what will be added or updated
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 僅清除應用程序的密鑰。返回 Promise 對象。
Parameters:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
callback | ?(error: ?Error) => void | No | 將調用任何錯誤的函數。 |
getAllKeys()
static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)
獲取應用程序已知的所有密鑰;適用於所有調用者,庫等。返回Promise對象。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
callback | ?(error: ?Error, keys: ?Array | No | 函數將調用找到的鍵和任何錯誤。 |
flushGetRequests()
static flushGetRequests(): [object Object]
使用單個批處理調用刷新任何掛起的請求以獲取數據。
multiGet()
static multiGet(keys: Array<string>, [callback]: ?(errors: ?Array<Error>, result: ?Array<Array<string>>) => void)
這允許您在給定一組鍵輸入的情況下批量獲取項目。將使用找到的相應鍵值對數組調用您的回調:
multiGet(['k1', 'k2'], cb) -> cb([['k1', 'val1'], ['k2', 'val2']])
該方法返回一個Promise對象。
參數:
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
keys | Array | Yes | 獲取項目的關鍵數組。 |
callback | ?(errors: ?Array | No | 將使用結果的鍵值數組調用的函數,以及找到的任何特定於鍵的錯誤的數組。 |
Example:
AsyncStorage.getAllKeys((err, keys) => {
AsyncStorage.multiGet(keys, (err, stores) => {
stores.map((result, i, store) => {
// get at each store's key/value so you can work with it
let key = store[i][0];
let value = store[i][1];
});
});
});
multiSet()
static multiSet(keyValuePairs: Array<Array<string>>, [callback]: ?(errors: ?Array<Error>) => void)
將其用作存儲多個鍵值對的批處理操作。操作完成後,您將收到任何錯誤的回調:
multiSet([['k1', 'val1'], ['k2', 'val2']], cb);
該方法返回一個Promise對象。
參數:
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
keyValuePairs | Array<Array | Yes | 要設置的項的鍵值數組的數組。 |
callback | ?(errors: ?Array | No | 將使用找到的任何特定於鍵的錯誤的數組調用的函數。 |
multiRemove()
static multiRemove(keys: Array<string>, [callback]: ?(errors: ?Array<Error>) => void)
調用此方法批量刪除keys數組中的所有鍵。返回Promise對象。
參數:
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
keys | Array | Yes | 要刪除的項的鍵數組。 |
callback | ?(errors: ?Array | No | 將被稱為任何特定於鍵的錯誤的數組。 |
例:
let keys = ['k1', 'k2'];
AsyncStorage.multiRemove(keys, (err) => {
// keys k1 & k2 removed, if they existed
// do most stuff after removal (if you want)
});
multiMerge()
static multiMerge(keyValuePairs: Array<Array<string>>, [callback]: ?(errors: ?Array<Error>) => void)
用於合併給定鍵集的現有值和新值的批處理操作。這假設值是字符串化JSON。返回 Promise 對象。
注意:所有本機實現都不支持此功能。
參數:
注意:所有本機實現都不支持此功能。
參數:
NAME | TYPE | REQUIRED | DESCRIPTION |
---|---|---|---|
keyValuePairs | Array<Array | Yes | 要合併的項的鍵值數組的數組。 |
callback | ?(errors: ?Array | No | 將使用找到的任何特定於鍵的錯誤的數組調用的函數。 |
Example:
// first user, initial values
let UID234_object = {
name: 'Chris',
age: 30,
traits: {hair: 'brown', eyes: 'brown'},
};
// first user, delta values
let UID234_delta = {
age: 31,
traits: {eyes: 'blue', shoe_size: 10},
};
// second user, initial values
let UID345_object = {
name: 'Marge',
age: 25,
traits: {hair: 'blonde', eyes: 'blue'},
};
// second user, delta values
let UID345_delta = {
age: 26,
traits: {eyes: 'green', shoe_size: 6},
};
let multi_set_pairs = [
['UID234', JSON.stringify(UID234_object)],
['UID345', JSON.stringify(UID345_object)],
];
let multi_merge_pairs = [
['UID234', JSON.stringify(UID234_delta)],
['UID345', JSON.stringify(UID345_delta)],
];
AsyncStorage.multiSet(multi_set_pairs, (err) => {
AsyncStorage.multiMerge(multi_merge_pairs, (err) => {
AsyncStorage.multiGet(['UID234', 'UID345'], (err, stores) => {
stores.map((result, i, store) => {
let key = store[i][0];
let val = store[i][1];
console.log(key, val);
});
});
});
});
// Console log results:
// => UID234 {"name":"Chris","age":31,"traits":{"shoe_size":10,"hair":"brown","eyes":"blue"}}
// => UID345 {"name":"Marge","age":26,"traits":{"shoe_size":6,"hair":"blonde","eyes":"green"}}
0 意見