【发布时间】:2020-04-04 00:35:53
【问题描述】:
我不知道怎么问这个问题,因为我仍然无法准确地描述问题。
我创建了一个 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];
};
这是我的地图功能。如您所见,我已将 ref 分配给图像。
问题:悬停时只有一张图像有效。
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>
【问题讨论】:
-
好像会的。不知道如何实现这一点。
-
您只需要在单独组件中的迭代器中使用
useHover。 @T.J。克劳德回答会解决你的问题 -
@Dupocas - 同意,这是一个副本。可悲的是,还没有赞成或接受的答案。 :-)
-
指向我自己的答案似乎有点自私,对吧?哈哈哈,你的似乎更具体。我正在删除评论并支持你的评论
标签: javascript reactjs react-hooks ref