我在react中创建了一个图片库,但是当你尝试点击不同的图像时,它不会切换到大图。当我console.log图像预览时,它出现为preview. classname .remove不是一个函数。有人能帮忙吗?提前谢谢你
import React, { useState } from 'react';
export default function ImageGallery(prod) {
console.log("image-preview")
const product=prod
const highlight = document.querySelector (".gallery-highlight");
const previews = document.querySelectorAll (".image-preview img");
previews.forEach(preview => {
preview.addEventListener("click", function() {
const smallSrc = this.src;
const bigSrc = smallSrc.replace ("small", "big");
previews.forEach(preview => preview.className.remove("image-active"));
highlight.src = bigSrc;
preview.className.add("image-active");
});
});
return (
<div className="image-gallery">
<img className="gallery-highlight" src={product.prod.image} alt={product.prod.name}
/>
<div className="image-preview">
<img src={product.prod.image2} alt={product.prod.name}className="image-active" />
<img src={product.prod.image3} alt={product.prod.name}/>
<br />
</div>
);
}
const previews = document.querySelectorAll (".image-preview img");
将为您提供该选择器在UI上可用的HTML节点列表。你从那个列表项访问className
,你会得到一个string
值。
string
值执行remove
。你可以尝试用classList
代替className
。您的代码将被修改如下:
previews.forEach(preview => preview.classList.remove("image-active"));
似乎你正在尝试添加动态css类,我建议你这样做的基础上的状态或道具,如:
const [active, setActive] = useState(false);
<div className={active? "active" : ""}></div>
这里你可以找到更多的例子。