【React Native】文件翻譯閱讀紀錄 - APIs - AsyncStorage

by - 上午9:00

Facebook Open Source React Native


AsyncStorage

AsyncStorage是一個簡單的,未加密的,異步的,持久的鍵值存儲系統,對應用程序來說是全局的。它應該用來代替LocalStorage。

建議您在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


參考

Methods

getItem()

static getItem(key: string, [callback]: ?(error: ?Error, result: ?string) => void)
獲取鍵的項目並在完成時調用回調。返回 Promise 對象。
參數:
NAMETYPEREQUIREDDESCRIPTION
keystringYes要獲取的項的鍵。
callback?(error: ?Error, result: ?string) => voidNo如果找到或將出現任何錯誤,將調用結果的函數。

setItem()

static setItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
設置鍵的值並在完成時調用回調。返回 Promise 對象。
參數:
NAMETYPEREQUIREDDESCRIPTION
keystringYes要設置的項的鍵。
valuestringYes為鍵設置的值。
callback?(error: ?Error) => voidNo將調用任何錯誤的函數。

removeItem()

static removeItem(key: string, [callback]: ?(error: ?Error) => void)
刪除鍵的項目並在完成時調用回調。返回 Promise 對象。
參數:
NAMETYPEREQUIREDDESCRIPTION
keystringYes要刪除的項的鍵。
callback?(error: ?Error) => voidNo將調用任何錯誤的函數。

mergeItem()

static mergeItem(key: string, value: string, [callback]: ?(error: ?Error) => void)
將現有鍵值與輸入值合併,假設兩個值都是字符串化JSON。返回Promise對象。

注意:所有本機實現都不支持此功能。

參數:
NAMETYPEREQUIREDDESCRIPTION
keystringYes要修改的項的鍵。
valuestringYes要為鍵合併的新值。
callback?(error: ?Error) => voidNo將調用任何錯誤的函數。
例:
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:
NAMETYPEREQUIREDDESCRIPTION
callback?(error: ?Error) => voidNo將調用任何錯誤的函數。

getAllKeys()

static getAllKeys([callback]: ?(error: ?Error, keys: ?Array<string>) => void)
獲取應用程序已知的所有密鑰;適用於所有調用者,庫等。返回Promise對象。
參數:
NAMETYPEREQUIREDDESCRIPTION
callback?(error: ?Error, keys: ?Array) => voidNo函數將調用找到的鍵和任何錯誤。

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對象。

參數:
NAMETYPEREQUIREDDESCRIPTION
keysArrayYes獲取項目的關鍵數組。
callback?(errors: ?Array, result: ?Array<Array>) => voidNo將使用結果的鍵值數組調用的函數,以及找到的任何特定於鍵的錯誤的數組。
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對象。

參數:
NAMETYPEREQUIREDDESCRIPTION
keyValuePairsArray<Array>Yes要設置的項的鍵值數組的數組。
callback?(errors: ?Array) => voidNo將使用找到的任何特定於鍵的錯誤的數組調用的函數。

multiRemove()

static multiRemove(keys: Array<string>, [callback]: ?(errors: ?Array<Error>) => void)
調用此方法批量刪除keys數組中的所有鍵。返回Promise對象。

參數:
NAMETYPEREQUIREDDESCRIPTION
keysArrayYes要刪除的項的鍵數組。
callback?(errors: ?Array) => voidNo將被稱為任何特定於鍵的錯誤的數組。
例:
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 對象。

注意:所有本機實現都不支持此功能。

參數:
NAMETYPEREQUIREDDESCRIPTION
keyValuePairsArray<Array>Yes要合併的項的鍵值數組的數組。
callback?(errors: ?Array) => voidNo將使用找到的任何特定於鍵的錯誤的數組調用的函數。
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"}}





You May Also Like

0 意見