【问题标题】:Storing object property in local Storage在本地存储中存储对象属性
【发布时间】:2021-07-18 18:30:18
【问题描述】:

我有一个可以获取 30 张图片的应用,当您将鼠标悬停在图片上时,您可以通过点击出现的心形来“收藏”该图片。当心脏被点击时,这个函数就会运行。

    //toggle favorited on and off
  const toggleFavorite = (id) => {
    const newArr = allPhotos.map((photo) => {
      if (photo.id === id) {
        return {
          ...photo,
          liked_by_user: !photo.liked_by_user,
        };
      }
      return photo;
    });
    setAllPhotos(newArr);
  };

当你点击这颗心时,上面的函数会获取照片并将“liked_by_user”属性设置为与该值相反的值(真或假),如果为真,则填充心形图标,如果为假,则心只是勾勒出来的。

我想将“Liked_by_user”属性存储在本地存储中,这样如果页面被刷新,图像“liked_by_user”仍将设置为 true,而心形图标仍将被归档。

我以前从未实现过 localStorage。

我认为我走在正确的轨道上,当点击心形图标时,会创建本地存储,但它的值是“未定义”

注意 - 我所有的图像都存储在一个名为 AllPhotos 的数组中

      //toggle favorited on and off
  const toggleFavorite = (id) => {
    const newArr = allPhotos.map((photo) => {
      if (photo.id === id) {
        return {
          ...photo,
          liked_by_user: !photo.liked_by_user,
        };
      }
      return photo;
    });

    setAllPhotos(newArr);

*****issue below****
    let ImageToStore = newArr.filter((image) => image.id === id);
    localStorage.setItem("image", JSON.stringify(ImageToStore.liked_by_user));
  };

任何帮助将不胜感激!

【问题讨论】:

  • 当用户注销,而其他人使用同一台机器时怎么办?您需要重新考虑这一点。
  • Medi,这只是我为练习我的反应技能而制作的一个愚蠢的应用程序。我想我不妨添加一些我以前从未做过的事情(localStorage),不过我很感激这个问题。

标签: javascript reactjs local-storage


【解决方案1】:

.filter() 返回一个数组,这就是“liked_by_user”属性未定义的原因。

试试这个:

let ImageToStore = newArr.filter((image) => image.id === id)[0];
localStorage.setItem("image", JSON.stringify(ImageToStore.liked_by_user))

在这里,您将提取数组的第一个元素,该元素是具有 like_by_user 属性的对象。

注意:如果数组为空,它会抛出一个错误,所以你可能需要添加一个检查。

【讨论】:

  • 谢谢!本地存储现在正在工作,现在具有我期望的价值。仍然没有完全按照我的意图去做,但正在朝着它取得进展:)
  • 很高兴它有帮助。那你介意接受答案吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多