In this blog post, we’ll explore how to handle DOM events on React components and specifically address the challenge of showing or hiding a panel based on mouse hover status.

Let’s say we have a link, and we want to show a panel when the user hovers over it. We can achieve this by using the onMouseEnter event on the <a> element that triggers the panel to show up. Here’s an example:

<a
  onMouseEnter={() => {
    setShowCard(true);
  }}
>
  flavio
</a>

In this case, the onMouseEnter event sets the showCard state variable to true, causing the panel to show up.

Now, what if we want to show the panel when hovering over a React component, such as a ProfileCard component? Simply passing the onMouseEnter and onMouseLeave events as props to the ProfileCard component won’t work because ProfileCard is not a DOM element and therefore, cannot receive the events fired.

To solve this, we need to identify a DOM element within the ProfileCard component that can receive these events and attach the event handlers there. One approach is to use a container div. Here’s an example:

const ProfileCard = ({ onMouseEnter, onMouseLeave }) => (
  <div
    onMouseEnter={onMouseEnter}
    onMouseLeave={onMouseLeave}
  >
    {/* Content of the ProfileCard component */}
  </div>
);

By passing the onMouseEnter and onMouseLeave events as props to the ProfileCard component and attaching them to the container div, we can now show and hide the panel based on mouse hover.

By following this approach, the panel will be hidden when the mouse is moved away from the ProfileCard component. This behavior mimics the functionality of the Twitter profile popup that appears when you hover over a person’s name.

Tags: React, DOM events, components, mouse hover, event handling