reactjs - 在反应中更改地图中一项的状态
问题描述
我有一个页面显示使用 map 方法通过 api 调用获取的图像。现在我想做的是FavoriteIcon
通过单击来切换喜欢或不喜欢的状态。
当我尝试使用useState
钩子实现它时,如果我单击FavoriteIcon
单个图像中的 ,所有图像都设置为相同的状态。我只希望单击的图像更改其状态。
import React, { useState, useEffect } from "react";
import FavoriteIcon from "@material-ui/icons/Favorite";
import FavoriteBorderIcon from "@material-ui/icons/FavoriteBorder";
// services
import medias from "../../services/mediaServices";
function Favorites({ fetchUrl, catagory }) {
const classes = useStyles();
const [images, setImages] = useState([{}]);
const [favIcon, setFavIcon] = useState();
useEffect(() => {
async function getData() {
const request = await medias.getMedias(fetchUrl);
setImages(request.data.message);
}
getData();
}, [fetchUrl, enqueueSnackbar, closeSnackbar]);
return (
<div className={classes.favorites}>
<div className={classes.favorites__items}>
{images &&
images.map(image => {
return (
<div
elevation={3}
className={classes.favorites__posters}
style={
{
// border: "2px solid black"
}
}
>
<img
key={image.id}
src={image.thumbnailUrl}
alt={image.title}
/>
{favIcon ? (
<FavoriteIcon onClick={() => setFavIcon(false)} />
) : (
<FavoriteBorderIcon onClick={() => setFavIcon(true)} />
)}
</div>
);
})}
</div>
</div>
);
}
export default Favorites;
解决方案
在不将其分解为更多组件的情况下,您的favIcon
状态需要包含所有图标的状态。它应该用类似的东西初始化
images.map(image => {id: image.id, state: false})
然后你可以改变你onClick
的只是更新状态的相关部分
setFavIcon([...favIcon].map(x => {if(x.id === image.id) {x.state = !x.state}; return x}))
推荐阅读
- shell - 转换日期格式的命令行工具
- java - 使用 java8 通过 Hashmap 进行迭代时返回或收集值
- python - 尽管可以使用 .get_data() 检索数据,但 Matplotlib fig 未在图中显示更新的数据
- python - Python - 变量在递归函数中没有明显原因改变其值
- amazon-web-services - SSH 进入 AWS Cloud9 环境
- angular - 实现操纵 Dom 的 3rd 方库的正确方法是什么?
- python - Python 代码不产生任何输出。这里使用生成器正确吗?
- gatsby - gatsby-node.js createPages 没有向 pageContext 中的组件发送数据
- javascript - 如何在 Node Js 环境中反语句
- vue.js - 如果我使用带有电子 js 的 vue 路由器,如何修复空白页?