我想在数组中选择一个图像的索引,在单击它时将其设置为零。
为了简单起见,我有图像1(index == 0)和图像2(index == 1)。当我点击图像2时,handleImageClick函数通过将图像2的索引设置为零来工作。问题是,为了将图像1的索引再次设置为零,我必须第二次点击图像2,这是没有意义的。为什么会出现这种逻辑错误?
下面是我的handleImageClick函数:
const handleImageClick = (index) => {
const newImages = [...images];
const clickedImage = newImages[index];
newImages.splice(index, 1);
newImages.unshift(clickedImage);
setImages(newImages);
};
以下是图像的显示方式以及onClick的放置位置:
<Grid templateColumns="repeat(3, 1fr)" gap={4} mt={4}>
{urls.map((url, index) => (
<Box
className="img-container"
key={index}
position="relative"
onClick={() => handleImageClick(index)}
>
<Image
maxHeight="125px"
maxW="180px"
src={url}
/>
<IconButton
aria-label="Delete"
icon={<DeleteIcon />}
onClick={() => handleDeleteImage(index)}
size="sm"
colorScheme="red"
position="absolute"
top="5px"
right="5px"
/>
</Box>
))}
</Grid>
urls.map 是一个临时blob url数组,允许用户查看其图像的预览。
任何帮助都将不胜感激。谢谢。
1条答案
按热度按时间gab6jxml1#
splice()
方法提取指定索引的数组元素,并返回一个提取了元素的数组。在这种情况下,您只需要提取一个元素并将其传递到数组的前端(index 0)尝试以下代码片段: