如何更新保存的项目 AsyncStorage
How to update saved items AsyncStorage
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
}
};
此处的目标是获得用户最近搜索的列表,并更新他搜索过的列表
问题是 mergeItem
仅适用于使用 key/value
对的对象,您似乎想用它来更新数组。
Merges an existing key value with an input value, assuming both values
are stringified 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
}
};
它很复杂而且不理想,但应该可以。
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
}
};
此处的目标是获得用户最近搜索的列表,并更新他搜索过的列表
问题是 mergeItem
仅适用于使用 key/value
对的对象,您似乎想用它来更新数组。
Merges an existing key value with an input value, assuming both values are stringified 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
}
};
它很复杂而且不理想,但应该可以。