React 组件中第一次单击时单选按钮背景未更改

问题描述 投票:0回答:1

我正在开发一个 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;
}
javascript html css reactjs radio-button
1个回答
0
投票

在 CSS 中,您使用同级组合器 (+),它仅将样式应用于紧跟在 .这意味着您的 CSS 规则只会影响与无线电输入直接同级的标签。

将标签紧跟在同一个 .custom-input 容器中的输入之后。

© www.soinside.com 2019 - 2024. All rights reserved.