【发布时间】:2020-11-08 21:38:32
【问题描述】:
我有一个加载图像的应用程序,我想点击一个竖起大拇指的图标来“喜欢”和图像或垃圾箱图标来删除图像。虽然对后端的调用未决,但我想显示一个微调器而不是图标。当从商店获取我的调用的加载状态时,我的所有组件都会同时更新,而不是仅仅针对我正在点击的当前组件
如下图(点赞按钮后出现微调框)
如您所见,微调器出现在每个ImageCard!!!
ImageCard.tsx
export function ImageCard({ image }: ImageProp): ReactElement {
const [liked, setLiked] = useState(image.tags.includes(TAGS.FAV));
const imageLikeState = useSelector(likeImagePending);
const imageDeleteState = useSelector(deleteImagePending);
const dispatch = useDispatch();
const like = (public_id: string, tag: string) => {
setLiked(!liked);
dispatch(toggleLiked(public_id, tag));
};
const deleteImage = (public_id: string) => {
dispatch(deleteImageCall(public_id));
};
return (
<div className="card mb-5 portfolio-item">
<div className="card-image">
<img className="image" src={image.secure_url} alt="" />
</div>
<div className="card-button-container">
{!imageDeleteState && (
<FontAwesomeIcon
onClick={() => deleteImage(image.public_id)}
icon={trashRegular}
size="lg"
color="#FF4545"
/>
)}
{imageDeleteState && <img className="spinner" src={Spinner} alt="Loading Spinner" />}
<div className="rating-container">
<FontAwesomeIcon icon={starRegular} size="lg" color="#FF9529" />
<FontAwesomeIcon icon={starRegular} size="lg" color="#FF9529" />
<FontAwesomeIcon icon={starRegular} size="lg" color="#FF9529" />
<FontAwesomeIcon icon={starRegular} size="lg" color="#FF9529" />
<FontAwesomeIcon icon={starRegular} size="lg" color="#FF9529" />
</div>
{!imageLikeState && (
<FontAwesomeIcon
onClick={() => like(image.public_id, TAGS.FAV)}
icon={liked ? heartSolid : heartOutline}
size="lg"
color="#1A8CC9"
/>
)}
{imageLikeState && <img className="spinner" src={Spinner} alt="Loading Spinner" />}
</div>
</div>
);
}
【问题讨论】:
标签: reactjs react-redux react-hooks redux-toolkit