javascript - 将鼠标悬停在 X 上时,如何仅在单个列表中显示 X?
问题描述
当我要悬停在单个列表中时,我遇到了这个问题。当我悬停它时,我只想在一个列表上显示 X。但是当我将鼠标悬停在一个上时,它会一直显示。
import React from "react";
import { useState } from "react/cjs/react.development";
import "./list.css";
function List({ items }) {
const [over, setOver] = useState(false);
const mouseOver = () => {
setOver(!over);
};
return (
<ul>
{items.map((item, i) => {
return (
<>
<li
onMouseOver={mouseOver}
onMouseOut={mouseOver}
style={{
borderRight: `5px solid ${item.amount < 0 ? "red" : "green"}`,
}}
key={i}
className="item-name"
>
<p>{item.itemName}</p>
<p>{item.amount}</p>
<p style={{ display: over ? "block" : "none" }}>X</p>
</li>
</>
);
})}
</ul>
);
}
export default List;
解决方案
在每个项目中,您都应该有over
状态,并且不应为所有项目共享状态。我是这样写的:
// import React from "react";
// import "./list.css";
const items = [
{ id: 1, amount: 50000, itemName: "Salary" },
{ id: 2, amount: -500, itemName: "Gym" },
{ id: 3, amount: -5000, itemName: "Bill" },
];
const List = () => {
return (
<ul>
{items.map((item) => (
<ListItem key={item.id} item={item} />
))}
</ul>
);
}
// export default List;
const ListItem = ({ item }) => {
const [over, setOver] = React.useState(false);
const mouseOver = () => {
setOver(!over);
};
return (
<li
onMouseOver={mouseOver}
onMouseOut={mouseOver}
style={{
border: "1px solid black",
borderRight: `5px solid ${item.amount < 0 ? "red" : "green"}`,
}}
className="item-name"
>
<p>{item.itemName}</p>
<p>{item.amount}</p>
<p style={{ display: over ? "block" : "none" }}>X</p>
</li>
);
};
ReactDOM.render(<List />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- javascript - 使用useEffect React Hook时如何修复“React Hook useEffect缺少依赖项:'isError'和'isLoading'”?
- algolia - 将离线搜索添加到网站生成器创建的静态网站以供公司内部使用
- testng - 尝试在 TestNg 中将 Hashtable 作为 dataProvider 推送时遇到问题
- bluetooth-lowenergy - 使用 IAR 编译 Cypress 软件时出现问题
- flutter - 如何使卡片在颤动的身体之间
- mongodb - 如何更新文档数组中的多个嵌套字段
- php - MySQL 将列导出到文件作为更新语句
- python - 触发器拒绝来自 python 的 cosmos DB 更新
- django - django.db.utils.ProgrammingError:关系“vendors_vendor”不存在
- ethereum - 如何读取 tron 智能合约存储?