如何在地图函数内的每次迭代中分配新的引用?

问题描述 投票:0回答:1

我不确定如何问这个问题,因为我仍然无法准确地解决问题。

我已经创建了useHover函数。在下面,您将看到我正在映射数据并渲染一堆照片。但是,useHover仅适用于第一次迭代。

我怀疑是因为我的推荐。这是如何运作的?我应该在每次迭代中创建一个新的引用吗?还是那是个错误的想法?

我该怎么做?

这是我的useHover函数。

const useHover = () => {
  const ref = useRef();
  const [hovered, setHovered] = useState(false);

  const enter = () => setHovered(true);
  const leave = () => setHovered(false);

  useEffect(() => {
    ref.current.addEventListener("mouseenter", enter);
    ref.current.addEventListener("mouseleave", leave);

    return () => {
      ref.current.removeEventListener("mouseenter", enter);
      ref.current.removeEventListener("mouseleave", leave);
    };
  }, [ref]);

  return [ref, hovered];
};

这是我的地图功能。如您所见,我已将引用分配给该图像。

问题:悬停时只有其中一张图像有效。

const [ref, hovered] = useHover();

  return (
    <Wrapper>
      <Styles className="row">
        <Div className="col-xs-4">
          {data.map(item => (
            <div className="row imageSpace">
              {hovered && <h1>{item.fields.name}</h1>}
              <img
                ref={ref}
                className="image"
                key={item.sys.id}
                alt="fall"
                src={item.fields.image.file.url}
              />
            </div>
          ))}
        </Div>
javascript reactjs hook ref
1个回答
0
投票

我将尽可能使用CSS处理此问题,而不是处理JavaScript代码中的悬停。

如果在JavaScript代码中执行此操作,我将通过为悬停的对象创建一个组件来处理此问题:

function MyImage({src}) {
    const [ref, hovered] = useHover();
    return (
        <div className="row imageSpace">
          {hovered && <h1>{item.fields.name}</h1>}
          <img
            ref={ref}
            className="image"
            alt="fall"
            src={src}
          />
        </div>
    );
}

然后使用该组件:

return (
  <Wrapper>
    <Styles className="row">
      <Div className="col-xs-4">
        {data.map(item =>
          <MyImage
            key={item.sys.id}
            src={item.fields.image.file.url}
          />
        )}
      </Div>

(显然,如果需要,可以配置更多的道具。)

© www.soinside.com 2019 - 2024. All rights reserved.