如何在反应中独立设置按钮点击?
How to independently set a button click in react?
我想弄清楚如何设置一个在使用 .map 函数时可以独立禁用的按钮。因此,只要单击按钮,我就会创建一个状态,它会禁用该特定按钮。但是,它只会禁用所有不是我想要的按钮。有没有办法让按钮有自己的点击事件,可以根据索引禁用?
const [click, setClick] = useState(false);
const array = ["item 1", "item 2", "item 3"];
const disableClick = () => {
setClick(true);
};
return (
<div className="App">
{array.map((item) => (
<div>
<h2>{item}</h2>
{!click ? (
<button onClick={disableClick}>CLICK {item}</button>
) : (
<button disabled>Button clicked</button>
)}
</div>
))}
</div>
);
将点击处理程序和 useState
移到单独的组件中。
const ButtonView = (textContent) => {
const [disabled, setDisabled] = useState(false);
const onClick = () => {
setDisabled(true);
};
if (disabled) {
return <button disabled={disabled}>Button clicked</button>;
}
return <button onClick={onClick}>CLICK {textContent}</button>;
};
export const View = () => {
const array = ["item 1", "item 2", "item 3"];
return (
<div className="App">
{array.map((item, key) => (
<div key={key}>
<h2>{item}</h2>
<ButtonView textContent={item} />
</div>
))}
</div>
);
};
或者这样做:
const ButtonView = (textContent) => {
const [disabled, setDisabled] = useState(false);
const onClick = () => {
setDisabled(true);
};
const content = disabled ? "Button clicked" : textContent
return <button disabled={disabled} onClick={onClick}>CLICK {content}</button>;
};
Disable 接受一个你可以提供给它的参数
<button disabled={click? true:false} >Button clicked</button>
Is there a way to make the buttons have their own click event which
can be disabled according to the index?
是的,怎么样?我们可以将其设置为包含按钮名称 const [disabledBtn, setDisabledBtn] = useState("item 1");
,而不是将点击状态设置为 true 或 false,然后我们可以将其与地图中的项目进行比较。
<button disabled={disabledBtn == item ? true:false} >Button clicked</button>
此代码渲染按钮时第一个按钮默认禁用,如果用户单击其他可用按钮之一,它将触发重新渲染并且 btn 将被禁用。
您应该为您的子组件添加一个键以保持渲染之间的唯一性。
这段代码应该可以回答您的问题
const [disabledBtn, setDisabledBtn] = useState("item 1");
const array = ["item 1", "item 2", "item 3"];
const handleDisableClick = (item) => {
setDisabledBtn(item);
};
return (
<div className="App">
{array.map((item, idx) => (
<div key={idx}>
<h2>{item}</h2>
<button
disabled={disabledBtn == item ? true : false}
onClick={() => handleDisableClick(item)}
>
Button clicked
</button>
</div>
))}
</div>
);
我想弄清楚如何设置一个在使用 .map 函数时可以独立禁用的按钮。因此,只要单击按钮,我就会创建一个状态,它会禁用该特定按钮。但是,它只会禁用所有不是我想要的按钮。有没有办法让按钮有自己的点击事件,可以根据索引禁用?
const [click, setClick] = useState(false);
const array = ["item 1", "item 2", "item 3"];
const disableClick = () => {
setClick(true);
};
return (
<div className="App">
{array.map((item) => (
<div>
<h2>{item}</h2>
{!click ? (
<button onClick={disableClick}>CLICK {item}</button>
) : (
<button disabled>Button clicked</button>
)}
</div>
))}
</div>
);
将点击处理程序和 useState
移到单独的组件中。
const ButtonView = (textContent) => {
const [disabled, setDisabled] = useState(false);
const onClick = () => {
setDisabled(true);
};
if (disabled) {
return <button disabled={disabled}>Button clicked</button>;
}
return <button onClick={onClick}>CLICK {textContent}</button>;
};
export const View = () => {
const array = ["item 1", "item 2", "item 3"];
return (
<div className="App">
{array.map((item, key) => (
<div key={key}>
<h2>{item}</h2>
<ButtonView textContent={item} />
</div>
))}
</div>
);
};
或者这样做:
const ButtonView = (textContent) => {
const [disabled, setDisabled] = useState(false);
const onClick = () => {
setDisabled(true);
};
const content = disabled ? "Button clicked" : textContent
return <button disabled={disabled} onClick={onClick}>CLICK {content}</button>;
};
Disable 接受一个你可以提供给它的参数
<button disabled={click? true:false} >Button clicked</button>
Is there a way to make the buttons have their own click event which can be disabled according to the index?
是的,怎么样?我们可以将其设置为包含按钮名称 const [disabledBtn, setDisabledBtn] = useState("item 1");
,而不是将点击状态设置为 true 或 false,然后我们可以将其与地图中的项目进行比较。
<button disabled={disabledBtn == item ? true:false} >Button clicked</button>
此代码渲染按钮时第一个按钮默认禁用,如果用户单击其他可用按钮之一,它将触发重新渲染并且 btn 将被禁用。 您应该为您的子组件添加一个键以保持渲染之间的唯一性。
这段代码应该可以回答您的问题
const [disabledBtn, setDisabledBtn] = useState("item 1");
const array = ["item 1", "item 2", "item 3"];
const handleDisableClick = (item) => {
setDisabledBtn(item);
};
return (
<div className="App">
{array.map((item, idx) => (
<div key={idx}>
<h2>{item}</h2>
<button
disabled={disabledBtn == item ? true : false}
onClick={() => handleDisableClick(item)}
>
Button clicked
</button>
</div>
))}
</div>
);