我想实现添加到收藏夹列表的功能。但它只适用于单个项目。我需要多个项目。我使用useRef挂钩并使用此npm包react-use-localstorage
问题是我的本地存储无法正常工作。它总是更新一个项目,但我需要它作为一个数组,即[1,2,4,7,10]
如果我重新载入我的页面,只有3个数字ID将填满心脏🤨
import React, { useRef } from "react";
import FavoriteBorder from "@mui/icons-material/FavoriteBorder";
import Favorite from "@mui/icons-material/Favorite";
import IconButton from "@mui/material/IconButton";
import useLocalStorage from 'react-use-localstorage';
const Fv = ({ id }) => {
const [storageItem, setStorageItem] = useLocalStorage(
"favourites",
JSON.stringify([])
);
//const storagedArray = useRef(JSON.parse(storageItem));
//const isFavourited = storagedArray.current.includes(id);
const isFavourited = storageItem.includes(id)
const handleToggleFavourite = () => {
if (!isFavourited) {
setStorageItem(JSON.stringify([...JSON.parse(storageItem), id]));
} else {
setStorageItem(
JSON.stringify(
JSON.parse(storageItem).filter((savedId) => savedId !== id)
)
);
}
return (
<IconButton onClick={handleToggleFavourite}>
{isFavourited ? <Favorite color="error" /> : <FavoriteBorder color="error" />}
</IconButton>
);
};
export default Fv;
分配组件
<Fv id={product.id} />
1条答案
按热度按时间kqqjbcuj1#
好吧,说实话,我不知道为什么你的数组会这样。也许是这个外部库出了故障。你不需要使用任何外部库来管理你的
favourites
状态。下面是一个没有react-use-localstorage
的解决方案: