获取图像元素的“src”属性

Getting the "src" property of image elements

提问人:Mateen 提问时间:11/17/2023 最后编辑:isherwoodMateen 更新时间:11/17/2023 访问量:53

问:

我正在构建一个产品显示组件,其中所选图像显示为主要图像。如何在 useState 中获取每个图像的来源?我应该将其作为参数传递给函数吗?我是 React 的新手,因此非常感谢您的帮助。

import { useState } from "react";

function App() {
  const [insertImage, setInsertImage] = useState("/images/camaro.jpg");

  function setImage() {
    setInsertImage("SRC REQUIRED HERE");
  }
  return (
    <div className="flex flex-col gap-3 max-w-3xl m-auto">
      <div className="w-full">
        <img src={insertImage} className="h-full w-full"></img>
      </div>
      <div className="flex gap-2">
        <div className="w-96" onClick={setImage}>
          <img
            src="/images/camaro.jpg"
            className="transition-opacity delay-75 hover:opacity-70 cursor-pointer active:scale-95"
          ></img>
        </div>
        <div className="w-96" onClick={setImage}>
          <img
            src="/images/mclaren.jpg"
            className="transition-opacity delay-75 hover:opacity-70 cursor-pointer active:scale-95"
          ></img>
        </div>
        <div className="w-96" onClick={setImage}>
          <img
            src="/images/gtr.jpg"
            className="transition-opacity delay-75 hover:opacity-70 cursor-pointer active:scale-95"
          ></img>
        </div>
        <div className="w-96" onClick={setImage}>
          <img
            src="/images/mclaren.jpg"
            className="transition-opacity delay-75 hover:opacity-70 cursor-pointer active:scale-95"
          ></img>
        </div>
      </div>
    </div>
  );
}

export default App;
反应JS 顺风-CSS

评论


答:

1赞 DBS 11/17/2023 #1

你可以使用 (MDN Docs) 通过 click 事件访问包装器元素。从那里,你可以使用查询选择器(MDN Docs)搜索包含的图像,然后读取属性:currentTargetsrc

更新:setImage()

function setImage(e) {
  const src = e.currentTarget.querySelector('img').src
  setInsertImage(src)
}
1赞 aarvinr 11/17/2023 #2

为此,您可以更改为接受源的参数,以便可以显示所选图像:setImage()

function App() {
  const [insertImage, setInsertImage] = useState("/images/camaro.jpg");

  function setImage(src) {
    setInsertImage(src);
  }

  return (
    <>
      <div className="w-full">
        <img src={insertImage} className="h-full w-full"></img>
      </div>
      <div className="w-96" onClick={() => setImage("/images/mclaren.jpg")}>
        <img
          src="/images/mclaren.jpg"
          className="transition-opacity delay-75 hover:opacity-70 cursor-pointer active:scale-95"
        ></img>
      </div>
    </>
  );
}