如何更新已保存的项目异步存储



尝试合并项目时出错的屏幕截图 我试图保存每个用户在我的应用程序中执行的一些最近搜索 我使用 Asyncstorage 设置了项目,但这删除了以前的搜索,合并项目似乎在这里不起作用和建议?

_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为您工作。

  1. 首先设置一个空数组
  2. 检查是否有SNUMBER
  3. 如果有,请使用保存的数组更新数组
  4. numberToSave推入阵列
  5. 将数组保存到异步存储(记住要字符串化)

这是代码

_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
  }
};

它令人费解且不理想,但它应该有效。

最新更新