在 reactjs 中悬停时显示组件 [关闭]

Posted

技术标签:

【中文标题】在 reactjs 中悬停时显示组件 [关闭]【英文标题】:Show a component on hover in reactjs [closed] 【发布时间】:2017-11-17 21:05:42 【问题描述】:

我创建了几个带有特定内容标题的部分。

我想在悬停在不同部分上方时显示一个简短的预览。

有谁知道如何创建一个带有条件渲染的 react 组件的 hoverActionHandler?

【问题讨论】:

【参考方案1】:

您可以使用onMouseOveronMouseOut 来更改状态并根据状态的值有条件地渲染组件。

查看实际操作:

Hooks 实现:https://codesandbox.io/s/react-hover-example-hooks-0to7u 类实现:https://codesandbox.io/s/XopkqJ5oV

钩子:

import React,  useState  from "react";
import  render  from "react-dom";

const HoverableDiv = ( handleMouseOver, handleMouseOut ) => 
  return (
    <div onMouseOver=handleMouseOver onMouseOut=handleMouseOut>
      Hover Me
    </div>
  );
;

const HoverText = () => 
  return (
    <div>
      Hovering right meow!
      <span role="img" aria-label="cat">
        ?
      </span>
    </div>
  );
;

const HoverExample = () => 
  const [isHovering, setIsHovering] = useState(false);
  const handleMouseOver = () => 
    setIsHovering(true);
  ;

  const handleMouseOut = () => 
    setIsHovering(false);
  ;

  return (
    <div>
      /* Hover over this div to hide/show <HoverText /> */
      <HoverableDiv
        handleMouseOver=handleMouseOver
        handleMouseOut=handleMouseOut
      />
      isHovering && <HoverText />
    </div>
  );
;

类:

import React,  Component  from "react";
import  render  from "react-dom";

const HoverableDiv = React.memo(( handleMouseOver, handleMouseOut ) => 
  return (
    <div onMouseOver=handleMouseOver onMouseOut=handleMouseOut>
      Hover Me
    </div>
  );
);

const HoverText = () => 
  return (
    <div>
      Hovering right meow!
      <span role="img" aria-label="cat">
        ?
      </span>
    </div>
  );
;

class HoverExample extends Component 
  constructor(props) 
    super(props);
    this.handleMouseOver = this.handleMouseOver.bind(this);
    this.handleMouseOut = this.handleMouseOut.bind(this);
    this.state = 
      isHovering: false
    ;
  

  handleMouseOver() 
    this.setState(() => (
      isHovering: true
    ));
  

  handleMouseOut() 
    this.setState(() => (
      isHovering: false
    ));
  

  render() 
    return (
      <div>
        /* <HoverText /> gets shown when mouse is over <HoverableDiv /> */
        <HoverableDiv
          handleMouseOver=this.handleMouseOver
          handleMouseOut=this.handleMouseOut
        />
        this.state.isHovering && <HoverText />
      </div>
    );
  

【讨论】:

感谢您提供此示例。我解决了这个基础的问题并添加了一些帮助函数来优化悬停的处理。 +1 不错的解决方案!我只做了一个细微的改变,明确地将 isHovering 设置为 true 或 false 是否进入或离开,以防用户以某种方式结束在元素之外而没有触发 onMouseLeave。 如何保持悬停右喵! ? 悬停时可见 右转喵! ? 在某些情况下,我有其他组件(例如 div 内的 DropDown),上面的代码使悬停动作表现异常。为了解决这个问题,我必须为 mouseEnter 和 mouseLeave 事件创建不同的方法并相应地处理操作。 去抖动或节流怎么样?这是最好的答案吗?

以上是关于在 reactjs 中悬停时显示组件 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

EventListener 在悬停时显示隐藏

仅使用 CSS 在悬停时显示下拉菜单并在单击时关闭

在等待在 ReactJS 渲染中获取数据时显示加载微调器

Vue JS - 如何更改鼠标悬停时显示的组件的位置

如何在 Kendo Multiselect 中悬停时显示弹出窗口

如何在鼠标悬停在使用 Vuetify 数据表的表格时显示按钮