API getItem
Получает строковое значение для заданного key
. Эта функция может либо возвращать строковое значение для существующего key
, либо возвращать null
в противном случае.
Для хранения значения объекта его необходимо десериализовать, например, с помощью JSON.parse()
.
Примечание
в качестве альтернативы возвращаемому обещанию можно использовать опциональный обратный вызов.
Описание :
static getItem (
key : string ,
[ callback ] : ? ( error : ? Error , result : ? string ) => void ,
) : Promise
Возвращает :
Promise
, разрешающий строковое значение, если запись для данного key
существует, или null
в противном случае.
Promise
может быть также отклонена в случае ошибки хранения данных.
Пример :
getMyStringValue = async () => {
try {
return await AsyncStorage . getItem ( '@key' );
} catch ( e ) {
// read error
}
console . log ( 'Done.' );
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14 getMyObject = async () => {
try {
const jsonValue = await AsyncStorage . getItem (
'@key'
);
return jsonValue != null
? JSON . parse ( jsonValue )
: null ;
} catch ( e ) {
// read error
}
console . log ( 'Done.' );
};
setItem
Устанавливает строку value
для заданного key
. Эта операция может либо модифицировать существующую запись, если она уже существовала для данного key
, либо добавить новую.
Для хранения значения объекта необходимо его сериализовать, например, с помощью JSON.stringify()
.
Примечание
в качестве альтернативы возвращаемому обещанию можно использовать опциональный обратный вызов.
Описание :
static setItem (
key : string ,
value : string ,
[ callback ] : ? ( error : ? Error ) => void ,
) : Promise
Возвращает :
Promise
, разрешающееся по завершении операции set.
Promise
также может быть отвергнут в случае ошибки хранения данных.
Пример :
setStringValue = async ( value ) => {
try {
await AsyncStorage . setItem ( 'key' , value );
} catch ( e ) {
// save error
}
console . log ( 'Done.' );
};
setObjectValue = async ( value ) => {
try {
const jsonValue = JSON . stringify ( value );
await AsyncStorage . setItem ( 'key' , jsonValue );
} catch ( e ) {
// save error
}
console . log ( 'Done.' );
};
mergeItem
Объединяет существующее значение, хранящееся под key
, с новым value
, предполагая, что оба значения являются строками JSON .
Описание :
static mergeItem (
key : string ,
value : string ,
[ callback ] : ? ( error : ? Error ) => void ,
) : Promise
Возвращает :
Promise
с объединенными данными, если они существуют, null
в противном случае.
Пример :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 const USER_1 = {
name : 'Tom' ,
age : 20 ,
traits : {
hair : 'black' ,
eyes : 'blue' ,
},
};
const USER_2 = {
name : 'Sarah' ,
age : 21 ,
hobby : 'cars' ,
traits : {
eyes : 'green' ,
},
};
mergeUsers = async () => {
try {
//save first user
await AsyncStorage . setItem (
'@MyApp_user' ,
JSON . stringify ( USER_1 )
);
// merge USER_2 into saved USER_1
await AsyncStorage . mergeItem (
'@MyApp_user' ,
JSON . stringify ( USER_2 )
);
// read merged item
const currentUser = await AsyncStorage . getItem (
'@MyApp_user'
);
console . log ( currentUser );
// console.log result:
// {
// name: 'Sarah',
// age: 21,
// hobby: 'cars',
// traits: {
// eyes: 'green',
// hair: 'black'
// }
// }
}
};
removeItem
Удаляет элемент для key
, после завершения вызывает (необязательный) обратный вызов.
Описание :
static removeItem (
key : string ,
[ callback ] : ? ( error : ? Error ) => void ,
) : Promise
Возвращает :
Объект Promise
.
Пример :
removeValue = async () => {
try {
await AsyncStorage . removeItem ( '@MyApp_key' );
} catch ( e ) {
// remove error
}
console . log ( 'Done.' );
};
getAllKeys
Возвращает все ключи, известные вашему приложению, для всех вызывающих, библиотек и т.д. После завершения вызывается callback
с ошибками (если таковые имеются) и массивом ключей.
Описание :
static getAllKeys (
[ callback ] : ? ( error : ? Error , keys : ? Array < string > ) => void ,
) : Promise
Возвращает :
Объект Promise
.
Пример :
1
2
3
4
5
6
7
8
9
10
11
12 getAllKeys = async () => {
let keys = [];
try {
keys = await AsyncStorage . getAllKeys ();
} catch ( e ) {
// read key error
}
console . log ( keys );
// example console.log result:
// ['@MyApp_user', '@MyApp_key']
};
multiGet
Пакетная выборка нескольких пар ключ-значение для заданного массива keys
. После завершения вызывается callback
с ошибками (если таковые имеются) и результатами.
Описание :
static multiGet (
keys : Array < string > ,
[ callback ] : ? (
errors : ? Array < Error > ,
result : ? Array < Array < string >>
) => void ,
) : Promise
Возвращает :
Promise
массива с найденными соответствующими парами ключ-значение, хранящегося в виде массива [key, value]
.
Пример :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 getMultiple = async () => {
let values ;
try {
values = await AsyncStorage . multiGet ([
'@MyApp_user' ,
'@MyApp_key' ,
]);
} catch ( e ) {
// read error
}
console . log ( values );
// example console.log output:
// [ ['@MyApp_user', 'myUserValue'], ['@MyApp_key', 'myKeyValue'] ]
};
multiSet
Пакетно сохраняет несколько пар ключ-значение. После завершения будет вызван callback
с любыми ошибками.
Описание :
static multiSet (
keyValuePairs : Array < Array < string >> ,
[ callback ] : ? ( errors : ? Array < Error > ) => void
) : Promise
Возвращает :
Объект Promise
.
Пример :
1
2
3
4
5
6
7
8
9
10
11
12
13
14 multiSet = async () => {
const firstPair = [ '@MyApp_user' , 'value_1' ];
const secondPair = [ '@MyApp_key' , 'value_2' ];
try {
await AsyncStorage . multiSet ([
firstPair ,
secondPair ,
]);
} catch ( e ) {
//save error
}
console . log ( 'Done.' );
};
multiMerge
Многократное объединение существующих и новых значений в пакетном режиме. Предполагается, что значения представляют собой строки JSON . После завершения вызывается callback
с ошибками (если таковые имеются).
Описание :
static multiMerge (
keyValuePairs : Array < Array < string >> ,
[ callback ] : ? ( errors : ? Array < Error > ) => void ,
) : Promise
Возвращает :
Объект Promise
.
Пример :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 const USER_1 = {
name : 'Tom' ,
age : 30 ,
traits : { hair : 'brown' },
};
const USER_1_DELTA = {
age : 31 ,
traits : { eyes : 'blue' },
};
const USER_2 = {
name : 'Sarah' ,
age : 25 ,
traits : { hair : 'black' },
};
const USER_2_DELTA = {
age : 26 ,
traits : { hair : 'green' },
};
const multiSet = [
[ '@MyApp_USER_1' , JSON . stringify ( USER_1 )],
[ '@MyApp_USER_2' , JSON . stringify ( USER_2 )],
];
const multiMerge = [
[ '@MyApp_USER_1' , JSON . stringify ( USER_1_DELTA )],
[ '@MyApp_USER_2' , JSON . stringify ( USER_2_DELTA )],
];
mergeMultiple = async () => {
let currentlyMerged ;
try {
await AsyncStorage . multiSet ( multiSet );
await AsyncStorage . multiMerge ( multiMerge );
currentlyMerged = await AsyncStorage . multiGet ([
'@MyApp_USER_1' ,
'@MyApp_USER_2' ,
]);
} catch ( e ) {
// error
}
console . log ( currentlyMerged );
// console.log output:
// [
// [
// 'USER_1',
// {
// name:"Tom",
// age:30,
// traits: {
// hair: 'brown'
// eyes: 'blue'
// }
// }
// ],
// [
// 'USER_2',
// {
// name:'Sarah',
// age:26,
// traits: {
// hair: 'green'
// }
// }
// ]
// ]
};
multiRemove
Пакетно очищает несколько записей типа "ключ-значение" для заданного массива keys
. После завершения вызывается callback
с ошибками (если таковые имеются).
Описание :
static multiRemove (
keys : Array < string > ,
[ callback ] : ? ( errors : ? Array < Error > ) => void ,
) : Promise
Возвращает :
Объект Promise
.
Пример :
removeFew = async () => {
const keys = [ '@MyApp_USER_1' , '@MyApp_USER_2' ];
try {
await AsyncStorage . multiRemove ( keys );
} catch ( e ) {
// remove error
}
console . log ( 'Done' );
};
clear
Удаляет все данные AsyncStorage
, для всех клиентов, библиотек и т.д. Вероятно, для очистки только ключей вашего приложения лучше использовать removeItem
или multiRemove
.
Описание :
static clear (
[ callback ] : ? ( error : ? Error ) => void ,
) : Promise
Возвращает :
Объект Promise
.
Пример :
clearAll = async () => {
try {
await AsyncStorage . clear ();
} catch ( e ) {
// clear error
}
console . log ( 'Done.' );
};
useAsyncStorage
Функция useAsyncStorage
возвращает объект, раскрывающий все методы, позволяющие взаимодействовать с хранимым значением.
Описание :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 static useAsyncStorage ( key : string ) : {
getItem : (
callback ?: ? ( error : ? Error , result : string | null ) => void ,
) => Promise < string | null > ,
setItem : (
value : string ,
callback ?: ? ( error : ? Error ) => void ,
) => Promise < null > ,
mergeItem : (
value : string ,
callback ?: ? ( error : ? Error ) => void ,
) => Promise < null > ,
removeItem : (
callback ?: ? ( error : ? Error ) => void
) => Promise < null > ,
}
Возвращает :
object
.
Специальный пример :
Вы можете заменить свой App.js
на следующий, чтобы увидеть его в действии.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 import React , { useState , useEffect } from 'react' ;
import { View , Text , TouchableOpacity } from 'react-native' ;
import { useAsyncStorage } from '@react-native-async-storage/async-storage' ;
export default function App () {
const [ value , setValue ] = useState ( 'value' );
const { getItem , setItem } = useAsyncStorage (
'@storage_key'
);
const readItemFromStorage = async () => {
const item = await getItem ();
setValue ( item );
};
const writeItemToStorage = async ( newValue ) => {
await setItem ( newValue );
setValue ( newValue );
};
useEffect (() => {
readItemFromStorage ();
}, []);
return (
< View style = {{ margin : 40 }} >
< Text > Current value : { value } < /Text>
< TouchableOpacity
onPress = {() =>
writeItemToStorage (
Math . random ()
. toString ( 36 )
. substr ( 2 , 5 )
)
}
>
< Text > Update value < /Text>
< /TouchableOpacity>
< /View>
);
}
В данном примере:
При монтировании мы считываем значение по адресу @storage_key
и сохраняем его в состоянии под value
. При нажатии на кнопку "обновить значение" генерируется новая строка, сохраняется в асинхронном хранилище и в состоянии компонента Попробуйте перезагрузить приложение - вы увидите, что последнее значение по-прежнему считывается из async-хранилища