react-native - 如何更新已保存的项目 AsyncStorage
问题描述
尝试 mergeItem 时出现错误的屏幕截图我试图保存每个用户在我的应用程序中执行的一些最近搜索我使用 Asyncstorage 设置项,但这会删除以前的搜索并且 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
对的对象,并且您似乎想使用它来更新数组。
将现有键值与输入值合并,假设两个值都是字符串化的 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
}
};
它很复杂,并不理想,但它应该可以工作。
推荐阅读
- informatica - 如何在不使用 PMCMD 命令的情况下在 Informatica 中的工作流 A 之后触发工作流 B
- android - 为什么 Android Developer Bundle Tool 无法识别我的密钥库中的密钥?
- javascript - Vue 3 改变反应对象
- bundle - 如何在更改自定义数量更改按钮 Magento 2 时更新捆绑产品摘要中的数量?
- discord - 如何发出停止提醒的命令,discord.py?
- php - 从 imagecreatetruecolor() 获取 base64 字符串?
- flutter - Flutter:如何获取http响应头
- python - 试图在 google colab 上创建与我的本地 mysql 数据库的连接
- packer - 在配置器中应用重启后无法与实例进行 ssh 握手
- git - Git拉另一个分支并结帐