我正在尝试为我的天气应用程序构建一个删除函数,该函数仅在我通过 MAP 循环尝试的数组中的最后一个位置上工作,但出现太多渲染错误。
这是我项目的沙箱 URL - https://codesandbox.io/s/kind-platform-cymzx?fontsize=14&hidenavigation=1&theme=dark
我不明白如果在最后一个上工作,你为什么不在第一个上工作? (对于 for 循环,它让我只编辑最后一个,在地图循环中,它说渲染太多)
伙计们,我已经坚持了 3 天了,请帮忙。
答案 0 :(得分:0)
这是您的功能:
let deleteFunc = (name) => {
allFavorite.map((item, index) => {
console.log(item.name);
let updatedFavorite = allFavorite.filter((item, i) => (item.name = name));
setAllFavorite(updatedFavorite);
});
};
第一个问题是你在过滤器函数中改变了 item.name
。
第二个问题是您在地图内设置状态,因此您为 setAllFavorite
中的每个项目调用 allFavorite
。
您在这里的目标是先构建新状态,然后一次性应用它,如下所示:
let deleteFunc = (name) => {
// this will return new array where item with name `name` removed, and will pass it into state setter
setAllFavorite(allFavorite.filter((item) => item.name !== name));
};