ScreenShot of error when trying mergeItem我试图使用Asyncstorage保存每个用户在我的应用程序setItem中所做的一些最近的搜索,但这会删除以前的搜索,mergeItem在这里似乎不起作用,建议吗?
_storeSearches = async (numberToSave) => {
try {
await AsyncStorage.mergeItem('SNUMBER', numberToSave);
} catch (error) {
// Error saving data
}
};
_retrievePhoneNumberSearches = async () => {
try {
const value = await AsyncStorage.setItem('SNUMBER');
if (value !== null) {
return JSON.parse(value);
}
return [];
} catch (error) {
// Error retrieving data
}
};
此处的目标是获得用户最近进行的搜索的列表,并在用户进行搜索后更新列表
答案 0 :(得分:0)
问题是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
放入数组这是代码
_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
}
};
这令人费解,但并不理想,但它应该可以工作。