【问题标题】:Push to array with AsyncStorage使用 AsyncStorage 推送到数组
【发布时间】:2020-05-12 00:29:42
【问题描述】:

我正在尝试使用 React Native 中的 AsyncStorage 构建一个最喜欢的系统。在我的 ProductDetailScreen 上,我有相应的 ProdID 可用。我想将ProdID 保存到 AsyncStorage。

  const arr = [];
  const saveFavorites = async () => {
    arr.push(ProdID);
    await AsyncStorage.setItem("FAVORITES", JSON.stringify(arr));
  };

  const getFavorites = async () => {
    const favs = await AsyncStorage.getItem("FAVORITES");
    let parsedFavs = JSON.parse(favs);
    console.log(parsedFavs);
  };

这行得通。但是,如果我转到下一个产品并单击 saveFavorites 按钮,显然arr 会以空数组启动。

如果之前从未单击过 saveFavorites 按钮,但如果其中已经有一个 ID,则推送到该数组,我无法理解如何创建空数组。我用 useState 和 useEffect 尝试过,但没有成功。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    你可以这样做

    const saveFavorites = async () => {
     let data = await AsyncStorage.getItem("FAVORITES");
    
    let arr = JSON.parse(data);
        arr.push(ProdID);
        await AsyncStorage.setItem("FAVORITES", JSON.stringify(arr));
      };
    

    试试这个

    【讨论】:

    • 好吧,还是有点问题。如果一开始数组完全为空,我会收到此错误[Unhandled promise rejection: TypeError: null is not an object (evaluating 'arr.push')]
    • 你可以做类似arr ? arr.push(ProdID): [];
    • 希望对您有所帮助,欢迎提出疑问
    • 谢谢。它只有在我这样做时才有效:arr ? arr.push(ProdId) : (arr = [ProdId]); 唯一的问题是,检查 ProdId 是否已经在 arr 中,以便它不会被推入数组。
    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2011-07-07
    • 1970-01-01
    • 2022-01-03
    • 2015-10-18
    • 2019-04-16
    • 2017-04-24
    • 2016-11-18
    相关资源
    最近更新 更多