【发布时间】:2021-11-09 15:03:13
【问题描述】:
我正在尝试创建一个表示图块的反应组件。
这个组件只是一个由标签和复选框组成的div。
我遇到的问题是我可以单击组件上的任何位置,并且状态会像通常那样更改(例如:通过单击组件,我可以选中或取消选中复选框)。但是当我点击复选框时没有任何反应。
这是我新创建的组件代码:
const Tile = ({ title }) => {
const [selected, setSelected] = useState(false);
useEffect(()=>{
console.log(selected)
},[selected])
return (
<>
<div className="tile" onClick={ev=>setSelected(curr=>!curr)}>
<label>{title}</label>
<input
type="checkbox"
checked={!!selected}
onChange={ev=>{setSelected(curr=>!curr)}}
></input>
</div>
</>
);
};
在这里我在我的 App.js 中使用它:
return (
<Container>
<Row>
<Col md={4}>
<Tile title="USA"></Tile>
<Tile title="MOROCCO"></Tile>
<Tile title="FRANCE"></Tile>
</Col>
<Col md={8}>
<h1>Hello</h1>
</Col>
</Row>
</Container>
最后这是我的 css :
body {
padding-top: 20px;
font-family: "Poppins", sans-serif;
background-color: cornsilk;
}
.tile {
position: relative;
display: block;
width: 100%;
min-height: fit-content;
background: bisque;
padding: 8px;
margin: 1px;
}
.tile input[type="checkbox"] {
position: absolute;
top: 50%;
right: 0%;
transform: translate(-50%, -50%);
}
编辑:在标签上使用 htmlFor 修复的问题是标签是可点击的,而复选框是可点击的,但它们之间的空间不是。我希望整个组件都可以点击
【问题讨论】:
-
当您在
<div>元素上使用 onClick 事件尝试将它们替换为<buttons>时会发生这种情况。 -
我将 div 更改为按钮,但发生了同样的事情.. 组件响应所有地方的点击事件,但在复选框上
-
@AmineHammou,检查我的答案和代码沙箱,看看是否是您的想法。
-
@AmineHammou,我的答案已更新。
标签: javascript reactjs checkbox use-state