在本地存储中存储 object 属性

Storing object property in local Storage

我有一个可以获取 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”属性设置为与值(真或假)相反的值,如果它是真的心形图标已填充,如果为 false,则仅勾勒出心形。

我想将“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));
  };

如有任何帮助,我们将不胜感激!

.filter() returns 一个数组,所以这就是为什么 "liked_by_user" 属性 是未定义的。

试试这个:

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

在这里您要提取数组的第一个元素,该元素是将具有 liked_by_user 属性.

的对象

注意:如果数组为空,它会抛出错误,因此您可能需要为此添加检查。