javascript - 条件css类在reactjs中的mouseOnEnter或mouseOnOver上没有改变
问题描述
我正在尝试在表格中显示数据,因为每一行都包含一个在鼠标悬停时应该可见的信息图标。我们可以在单击该信息图标时显示一个弹出窗口。(该信息按钮上有一个 onlclick 方法)
为此,我在下面写了一段。
<td className="reportCard">
{filteredVehicles.map(t =>
<tr className="cardList" onMouseEnter={() => this.onClickReportRow(t.reportId) }>
<span className="CardReportsName"><p className="reportNameP" >{t.reportName}</p></span>
<span style={PreviewBtn} className={this.selectedReportId == t.reportId ? "previewBtnDisplayBlock" : "previewBtnDisplayNone"}>
<em className="fa fa-info" aria-hidden="true" onClick={() => this.showPopUp()} />
</span>
</tr>
)}
</td>
onClickReportRow(reportId){
this.selectedReportId= reportId
}
所以在这里,当我悬停在 row 上时,会调用悬停事件,但条件类没有改变。如果我使用的是 onclick 方法,并且字体中没有 onclick,那么这是有效的,否则它也不适用于 onclick。
这是一个非常奇怪的问题,不知道到底是什么问题。
提前感谢。
解决方案
问题在这里: this.selectedReportId== t.reportId
解决 this.selectedReportId 是函数还是什么?,您需要在此处进行状态以比较 repordId,以便在事件 mouseEnter 或 Leave 状态更改的值并可以应用在渲染中进行更改
链接https://codesandbox.io/s/upbeat-turing-q4jf1?file=/src/App.js:0-1827
import React, { Component } from "react";
import "./styles.css";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCoffee } from "@fortawesome/free-solid-svg-icons";
const element = <FontAwesomeIcon icon={faCoffee} />;
class App extends Component {
constructor(props) {
super(props);
this.state = {
filteredVehicles: [
{
reportId: 1,
reportName: "One"
},
{
reportId: 2,
reportName: "TWO"
}
],
selectedReportId: null,
popUp: false
};
}
onClickReportRow = (ID) => {
this.setState({ selectedReportId: ID });
};
showPopUp = () => {
this.setState({ popUp: !this.state.popUp });
};
handleonMouseLeave = () => {
this.setState({ selectedReportId: "" });
};
render() {
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<h2>Start editing to see some magic happen!</h2>
<table>
<td className="reportCard">
{this.state.filteredVehicles.map((t) => (
<tr
className="cardList"
onMouseEnter={() => this.onClickReportRow(t.reportId)}
onMouseLeave={() => this.handleonMouseLeave()}
>
<span className="CardReportsName">
<p className="reportNameP">{t.reportName}</p>
</span>
<span
className={
this.state.selectedReportId === t.reportId
? "previewBtnDisplayBlock"
: "previewBtnDisplayNone"
}
>
{element}
</span>
</tr>
))}
</td>
</table>
{this.state.popUp ? (
<div
class="modal fade"
tabindex="-1"
role="dialog"
aria-labelledby="exampleModalLabel"
aria-hidden="true"
>
Required PopUp
</div>
) : null}
</div>
);
}
}
export default App;
推荐阅读
- postgresql - 合并相同但条件不同的查询
- c# - 网络核心/身份服务器:无法注销
- kubernetes - 我们如何调试 istio pod 中的网络问题?
- reactjs - 在 create-react-app 中安装 react 项目时出现 npm 错误
- php - Laravel 创建的事件返回错误的记录
- ssl - 邮件服务器的 SSL 证书无效
- postgresql - 如何在 Spring Boot JPA 中按 Posgres 的 json 属性排序?
- c - 如果源代码在 win32 中以 UTF-8 编码,如何显示 UTF-16 const 字符串?
- python - Python计算两行不同的矩阵
- firebase - 如何从 firebase 检索数据,然后使用 Swift5 更新数据