reactjs - ReactJS - 禁用特定按钮
问题描述
我有一个循环(地图),它构造了许多具有不同 ID 的按钮。
我正在尝试通过单击自己来根据您的 id 禁用按钮,但它不起作用。我有以下代码:
function handleFlipCard() {
const cardPosition = cardCompare[0].cardPosition
document.getElementById(`b${cardPosition}`).style.cursor = "default" // it does works
document.getElementById(`b${cardPosition}`).border.style = "3px solid white" //it does works
document.getElementById(`b${cardPosition}`).disabled = true //WHY IT DOESN'T WORKS?
}
{cardsScreen.map((cardScreen, index) => (
<button className="btCard" onClick={handleFlipCard} disabled={buttonDisable} id={`b${index}`}>
))}
任何想法?
解决方案
首先,使用 JavaScript Vanilla 控制组件行为是一种非常糟糕的做法。
在这种情况下,最好的方法是创建一个状态来存储禁用的 ID 并根据点击填充状态。
import React, { useState } from 'react';
function Button() {
const [disabledButtons, setDisabledButtons] = useState([]);
const handleFlipCard = (id) => {
// do wherever you want
setDisabledButtons(prevState => [...prevState, id]);
}
{cardsScreen.map((cardScreen, index) => {
const id = `b${index}`;
return (
<button
className="btCard"
onClick={handleFlipCard(id)}
disabled={disabledButtons.includes(id)}
id={id}
>
Content
</button>
)
})}
}
推荐阅读
- selenium - 具有多个条件并获取元素值的 Selenium xpath
- ios - 如何以在 IB 中的方式将事件添加到 UIImageView 子类
- c# - 从 C# Windows 窗体调用 PHP Web 服务
- javascript - 如果未选中输入,则带有 Bootstrap Toggle 的复选框返回 null
- c# - 如何从文本框中获取日期时间并将其放入 SQL 语句
- docker - 无法运行 docker 镜像“quorra not found”
- javascript - angularjs过滤器只返回完全匹配的值
- spring-mvc - 映射器装饰器未编译
- angular - 当我尝试登录 Angular 6 时,不会调用路由身份验证保护
- apache-spark - Job 完成后,如何让每个 Spark Worker 只运行一次相同的功能?