Проблема в том, что mergeItem
работает только с объектами, использующими пару key/value
, и кажется, что вы хотите использовать его для обновления массива.
Объединяет существующее значение ключа с входным значением, предполагая, что оба значения являются строковыми JSON.
Таким образом, при выполнении чего-то подобного обновляется сохраненный исходный объект.
await AsyncStorage.setItem('person', JSON.stringify({age: 36 }));
await AsyncStorage.mergeItem('person', JSON.stringify({name: 'Chris'}))
let person = await AsyncStorage.getItem('person')
Если мы посмотрим на переменную person
, это будет объект {age: 36, name: 'Chris'}
Но так как вы пытаетесь обновить массив, я не думаю, что он будет работать.Тем не менее, есть запутанный способ заставить AsyncStorage работать на вас.
- Сначала установите пустой массив
- Проверьте, есть ли значение для
SNUMBER
- Если есть обновление массива с сохраненным массивом
- Вставьте
numberToSave
в массив - Сохраните массив в AsyncStorage (не забывая о преобразовании в строку)
Вот код
_storeSearches = async (numberToSave) => {
let numberArray = [];
try {
let storedNumbers = await AsyncStorage.getItem('SNUMBER');
if (storedNumbers !== null) {
numberArray = JSON.parse(storedNumbers); // you could do some additional checks to make sure it is an array
}
numberArray.push(numberToSave)
await AsyncStorage.setItem('SNUMBER', JSON.stringify(numberArray));
} catch (error) {
// Error saving data
}
};
Он запутанный и не идеальный, но должен работать.