You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JS元素悬停状态异常求助:鼠标离开后红色背景未消失问题

问题分析与解决方案

你遇到的问题很清晰:只给元素绑定了onMouseOver事件来激活悬停状态,但没有处理鼠标离开的逻辑,导致状态一直停留在true,红色背景自然不会消失。好在每个Element组件本身有独立的isHovered状态,只要补全事件处理,就能保证悬停效果只作用于当前被悬停的元素。

具体修复步骤

1. 补充鼠标离开事件处理

在你的div元素上添加onMouseLeave事件,当鼠标离开时将isHovered设为false,这样就能在鼠标离开时恢复元素的初始状态:

2. 确保样式生效

注意到你定义了styles变量但没有实际使用,推荐在styles.css中定义.hovered类的样式(更符合React样式管理的最佳实践),或者直接结合状态使用内联样式。

修改后的完整代码

组件代码

import "./styles.css";
import React, { memo, useState } from "react";

const Element = ({ id }) => {
  const [isHovered, setIsHovered] = useState(false);

  return (
    <div
      className={isHovered ? "hovered" : ""}
      onMouseOver={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)} // 新增鼠标离开事件处理
    >
      hello {id}
    </div>
  );
};

export default function App() {
  return (
    <div className="App">
      {[0, 1, 2].map((el) => {
        return <Element key={el} id={el} />;
      })}
    </div>
  );
}

styles.css 代码

.App {
  font-family: sans-serif;
  padding: 20px;
}

.hovered {
  background-color: red;
  padding: 8px;
  margin: 4px 0;
}

额外说明

每个Element组件都拥有独立的isHovered状态,所以当你悬停其中一个元素时,只会修改该组件的状态,不会影响其他元素,这部分逻辑本身是正确的,不需要额外调整。

内容的提问来源于stack exchange,提问作者Asking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:07:48