我如何解决 preview.className.remove is not a function in React?

how do I solve preview.className.remove is not a function in React?

我已经在 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");

将为您提供 HTML 节点的列表,这些节点在 UI 上可用该选择器。您正在从该列表项访问 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>

Here您可以找到更多示例。