javascript - 如何使用反应在锚链接上设置活动类
问题描述
我正在对我的项目使用反应。但是我如何使用状态来处理多个元素上的点击事件。单击时,所有元素都具有相同的类。这是一个片段:
const anchors = [
{
id: 1,
name: "Дансны үйлчилгээ",
key: "account-service",
},
{
id: 2,
name: "Зээлийн үйлчилгээ",
key: "loan-service",
},
{
id: 3,
name: "Картын үйлчилгээ",
key: "card-service",
},
{
id: 4,
name: "Даатгалын зуучлалын үйлчилгээ",
key: "insurance-service",
},
{
id: 5,
name: "Цахим банкны үйлчилгээ",
key: "bank-service",
},
{
id: 6,
name: "Mэдээлэл шинэчлэх",
key: "profile-service",
},
];
并循环数组:
<div className="positions">
{anchors.map((anchor: any) => {
return (
<a
href={"#" + anchor.key}
key={anchor.id}
className={active ? "selected" : ""}
onClick={(event: any) => handleClick(event)}
>
<img src="/images/arrow-right.svg" />
<span>{anchor.name}</span>
</a>
);
})}
</div>
我的钩子是
const [active, setActive] = useState<boolean>(false);
处理事件:
function handleClick(e: any) {
if (e.currentTarget) setActive(!active);
else return;
e.stopPropagation();
}
我想要的是当我单击锚点时它应该是active
类。但我被困住了。我实际上无法获取当前元素,它应该处于活动状态。
解决方案
更改您的active
状态以记录id
而不是布尔值
const [active, setActive] = useState<number | undefined>();
然后使用
<a
href={"#" + anchor.key}
key={anchor.id}
className={anchor.id === active ? "selected" : ""}
onClick={(e) => handleClick(e, anchor.id)}
>
和
function handleClick(e: React.MouseEvent<HTMLAnchorElement>, id: number) {
e.stopPropagation()
setActive(id)
}
推荐阅读
- c++ - 为什么我不能直接用 strcpy 复制 C 字符串的某个字符,而必须使用辅助字符串?
- vue.js - 在没有 vuex-persist 的情况下保留 Vuex 状态数据
- gtk - 非编译语言的构建系统
- mysql - MySQL在尝试创建过程时抛出错误“语句不完整,如果”
- ios - 如何快速创建具有特定类型别名的闭包?
- mysql - 无法调用存储过程 错误代码 1305
- unity3d - “找不到 DllAttribute”:从统一调用 .jslib 文件中的函数
- python - 用户在 numpy 中为 argsort() 定义的决胜局
- java - 未检测到加速器钛 JAVA_HOME
- flutter - 如何在颤动中自定义切换按钮