添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
腼腆的西瓜  ·  React-admin - ...·  2 周前    · 
大力的荒野  ·  Getting started with ...·  2 周前    · 
追风的花生  ·  Map in React js with ...·  2 周前    · 
温柔的保温杯  ·  How to Use the ...·  2 周前    · 
奔跑的凳子  ·  Loading in Rive Files ...·  2 周前    · 
强悍的苹果  ·  Python ...·  1 年前    · 
玩篮球的创口贴  ·  在 命令行中 Git ...·  2 年前    · 

useHover

import React from 'react';

export default function useHover () {
const [isHovering, setIsHovering] = React.useState(false);

const handleMouseOver = React.useCallback(() => setIsHovering(true), []);
const handleMouseOut = React.useCallback(() => setIsHovering(false), []);

const nodeRef = React.useRef();

const callbackRef = React.useCallback(
node => {
if (nodeRef.current) {
nodeRef.current.removeEventListener('mouseover', handleMouseOver);
nodeRef.current.removeEventListener('mouseout', handleMouseOut);
}

nodeRef.current = node;

if (nodeRef.current) {
nodeRef.current.addEventListener('mouseover', handleMouseOver);
nodeRef.current.addEventListener('mouseout', handleMouseOut);
}
},
[handleMouseOver, handleMouseOut]
);

return [callbackRef, isHovering];
};

有时候我们需要通过 JS 来处理鼠标移动到某个元素上状态或样式的改变,有点类似于 CSS 的属性 hover ,原理就是利用 事件监听 mouseover mouseout 来处理两种临界状态。

使用方法

实时编辑器
function HoverComponent() {
  const [hoverRef, isHovering] = useHover();
  return (
    <div className="card">
      <div className="card__body" ref={hoverRef}>
        { isHovering ? 'Hovering' : 'Not hovering' }
      </div>