reactjs - React 元素中的 onMouseOver 选择所有元素而不仅仅是单个元素
问题描述
我已经设置了一个组件,它在 onMouseOver 上显示一个“div”,说明组件是什么,因为它是一个链接。
但是,当您将鼠标悬停在任何一个元素上时,它会显示所有“div”,而不仅仅是要悬停的适当的一个。
我知道这是因为我的函数“通常”设置了状态,如果所述状态为真,它会显示全部 - 但我不知道如何重构我的代码以仅选择相关的代码。
这是我的代码:
class SideNav extends Component {
constructor(props) {
super (props)
this.state = {
linkHover: false
}
this.onMouseEnter = this.onMouseEnter.bind(this);
this.onMouseLeave = this.onMouseLeave.bind(this);
}
onMouseEnter() {
this.setState({
linkHover: true
});
}
onMouseLeave() {
this.setState({
linkHover: false
})
}
render() {
return (
<div>
<section className="side-nav-section">
<div className="side-nav-container">
<div className="side-nav-links-container">
<div className="side-nav-link" link="new-debt" onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Link a debt</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
<div className="side-nav-link" onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Dashboard</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
<div className="side-nav-link" onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Analytics</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
</div>
</div>
</section>
</div>
)
}
}
我觉得我应该知道这一点,这似乎是一个简单的问题,但无法弄清楚。
任何指针将不胜感激!
解决方案
这里最简单的方法是使用一个Int
来识别元素。然后你把它作为参数传递给onMouseEnter
. onMouseLeave
只需将其设置为false
,因此不会显示任何内容。
this.state = {
linkHover: false
}
onMouseEnter(id) {
this.setState({
linkHover: id
});
}
onMouseLeave() {
this.setState({
linkHover: false
})
}
<div className="side-nav-link" link="new-debt" onMouseEnter={() => this.onMouseEnter(0)} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover == 0 ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Link a debt</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
<div className="side-nav-link" onMouseEnter={() => this.onMouseEnter(1)} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover == 1 ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Dashboard</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
<div className="side-nav-link" onMouseEnter={() => this.onMouseEnter(2)} onMouseLeave={this.onMouseLeave}>
{ this.state.linkHover == 2 ? <div className="side-nav-link-hover"> <p className="side-nav-link-hover-paragraph">Analytics</p> <span className="side-nav-link-span"></span> </div> : null }
</div>
一旦你熟悉了 React 的类组件,我建议你看看更新的带有钩子的功能组件。他们产生了更具可读性的代码!
推荐阅读
- plugins - 无法启用 rabbitmq rabbitmq_auth_backend_oauth2 插件
- typescript - 使用 toggleDrawer 导航时出错。ToggleDrawer 不是函数
- reactjs - combineReducers() 在 React Redux 中不起作用
- node.js - 获取 API 并将变量设置为 res
- typescript - 如何动态地将新项目添加到 Typescript 中的对象?
- java - 使用改造 android studio 发布 JSONArray
- swift - 如何设置此代码以从图像上的任何位置放大?
- c++ - 为什么“#include
“即使在我的 CMake 文件中使用了“FetchContent_MakeAvailable”之后,也会失败? - redirect - 选择的随机网站的二维码链接
- java - 链接到同一页面的多个链接