javascript - 从按钮获取getAttribute并将类名切换到body react hooks
问题描述
我想改进我的代码,使用几个具有自定义类名(attr)的按钮,单击时应添加到正文标记(切换),现在添加第一个按钮只是因为 for("button")[0]
但应该适用于每个按钮
import React, { useState, useEffect } from "react"
function Test() {
const [isClass, setIsClass] = useState(false)
useEffect(() => {
const x = document.getElementsByTagName("button")[0].getAttribute("custom-class")
document.body.classList.toggle(x, isClass)
}, [isClass])
return (
<>
<button custom-class='test1' onClick={() => setIsClass(!isClass)}>
Setting test1 className
</button>
<button custom-class='test2' onClick={() => setIsClass(!isClass)}>
Setting test2 className
</button>
</>
)
}
export default Test
谢谢
解决方案
请使用此代码。
let oldStyle = "";
const handleClick = (index) => {
const x = [...document.getElementsByTagName("button")].map(value => value.getAttribute("custom-class"));
document.body.classList.contains(x[index]) ? document.body.classList.remove(x[index]) : document.body.classList.add(x[index]);
if(document.body.classList.length > 1) document.body.classList.replace(oldStyle, x[index]);
oldStyle = x[index];
}
return (
<>
<button custom-class='test1' onClick={() => handleClick(0)}>
Setting test1 className
</button>
<button custom-class='test2' onClick={() => handleClick(1)}>
Setting test2 className
</button>
</>
)
推荐阅读
- powershell - 如何将文件名添加到 csv 中的每条记录?
- node.js - 使用 html-pdf npm 包生成 pdf,在 AWS 上部署为 GET api
- java - Excel Apache POI - 内部带有文本的形状
- python - 使用多进程时python中内存映射时序的解释
- docker - 将用户添加到现有 Kubernetes 集群
- reactjs - react如何处理多个输入组件
- windows - PowerShell 如何处理“.” 在路径中?
- sqlite - 如何使用新值连接行中的现有值来更新sqlite行
- html - 如何阻止随机名称生成器在刷新时更改名称?
- c++ - 如何从 C++ 列出 BDB 中的键/值