我使用的是this recipe中定义的useHover()
react钩子,钩子返回一个ref
和一个布尔值,表示用户当前是否悬停在ref
标识的元素上,可以这样使用...
function App() {
const [hoverRef, isHovered] = useHover();
return (
<div ref={hoverRef}>
{isHovered ? 'Hovering' : 'Not Hovering'}
</div>
);
}
现在让我们假设我想使用另一个(假设的)钩子useDrag
,它返回一个ref
和一个布尔值,指示用户是否在页面上拖动当前元素。
function App() {
const [hoverRef, isHovered] = useHover();
const [dragRef, isDragging] = useDrag();
return (
<div ref={[hoverRef, dragRef]}>
{isHovered ? 'Hovering' : 'Not Hovering'}
{isDragging ? 'Dragging' : 'Not Dragging'}
</div>
);
}
这是行不通的,因为ref
prop只能接受单个引用对象,而不是上面示例中的列表。
如何解决这个问题,以便在同一个元素上使用多个这样的钩子?我找到了一个package,看起来可能就是我要找的,但我不确定是否遗漏了什么。
3条答案
按热度按时间xesrikrc1#
下面介绍了一种简单的方法。
注意:元素上的
ref
属性接受一个函数,这个函数稍后会在元素或节点可用时调用。因此,上面的
myRef
是具有定义的函数因此,简单的解决方案如下所示
g0czyy6m2#
React ref实际上只是一些可变数据的容器,存储为
current
属性。考虑到这一点,你应该能够整理出来的手:
6kkfgxo03#
按照@Doc-Han所说的,如果你需要一个引用,也需要一个表单注册表来输入,你可以这样做: