我正在开发一个 React 表单,我试图在选择单选按钮时更改标签的背景颜色,但是当我单击/检查按钮时,它首先更新状态,第二次单击时它会向我显示背景颜色。
我使用 onChange 和checked 属性的组合来管理单选按钮状态。
I have go through the Chat-GPT but it is still not answering me correctly
下面是任务组件和 CSS 的代码。
import React, { useState } from 'react';
export default function Task() {
let [formData, setformData] = useState({
uName: '',
uGender: '',
uMedals: 0,
});
let handleForm = (e) => {
let { name, value } = e.target;
if (name === 'uMedals') {
value = parseInt(value);
if (value <= 0){
value = 0;
if (value > 20)
value = formData.uMedals;
}
setformData((formData) => ({
...formData,
[name]: value,
}));
e.preventDefault();
};
return (
<div className='parent-container'>
<div className='content-wrapper'>
<div className='left'>
<form className='form-wrapper'>
<div className='name-wrapper'>
<label>Name</label>
{/* Name input */}
</div>
<div className='toogle-wrapper'>
<label className='lbl-gen'>Gender</label>
<div className='wrapper'>
<div className='custom-input'>
<input
type='radio'
id='female'
name='uGender'
value='female'
onChange={handleForm}
checked={formData.uGender === 'female'}
/>
<label htmlFor='female'>Female</label>
</div>
<div className='custom-input'>
<input
type='radio'
id='male'
name='uGender'
value='male'
onChange={handleForm}
checked={formData.uGender === 'male'}
/>
<label htmlFor='male'>Male</label>
</div>
</div>
</div>
<button style={{ width: '320px' }}>Add</button>
</form>
</div>
</div>
</div>
);
}
以下是上述Task组件的CSS代码
.custom-input input[type=radio] {
display: none;
}
.custom-input label {
display: block;
padding: 6px 8px;
color: #fff;
font-weight: bold;
text-align: center;
transition: all 0.4s ease;
cursor: pointer;
border-radius: 4px;
background-color: #717762;
}
.custom-input input[type='radio']:checked + label {
background-color: #f5f5f5;
color: #000;
}
在 CSS 中,您使用同级组合器 (+),它仅将样式应用于紧跟在 .这意味着您的 CSS 规则只会影响与无线电输入直接同级的标签。
将标签紧跟在同一个 .custom-input 容器中的输入之后。