【问题标题】:Reactjs radio button isnt getting checked properlyReactjs 单选按钮没有得到正确检查
【发布时间】:2021-10-18 11:28:40
【问题描述】:

我正在尝试构建一个过滤器,根据经验过滤所有候选人。我已经使用发送工作正常的单选按钮构建了过滤器,但问题是它没有得到检查。默认情况下,我希望在用户单击一个 btn 时不检查每个无线电 btn,然后应该检查它。当我单击 btn 时,它会过滤候选人,但未检查单选按钮本身。我的组件很大,这就是为什么我只提供了你们都需要的代码。 请帮助我正确设置单选按钮上的检查。 谢谢

        //i'm importing this array and using it in my component
export const filtersByExp = [
  {
    value: 0,
    label: "Fresher",
  },
  {
    value: 1,
    label: "1 year above ",
  },
  {
    value: 2,
    label: "2 year above ",
  },
  {
    value: 3,
    label: "3 year above  ",
  },
  {
    value: 4,
    label: "4 year above  ",
  },
  {
    value: 5,
    label: "5 year above  ",
  },
];

      //component
  const [filter, setFilter] = useState({
    stage: "all",
    exp: null,
    job_id: null,
  });
 const handleRadioChange = ({ target }) => {
            let value = target.value;
            let name = target.name;
            setFilter({
              ...filter,
              [name]: value,
            });
          };
        
    //jsx
        {[...filtersByExp].map((item) => (
                        <div key={item.value} className="mb-2">
                          <Form.Check
                            type="radio"
                            label={item.label}
                            name="exp"
                            checked={filter.exp === item.value}
                            onChange={handleRadioChange}
                            value={item.value}
                          />
                        </div>
                      ))}

【问题讨论】:

    标签: javascript html reactjs ecmascript-6 jsx


    【解决方案1】:

    您必须在 jsx 中使用 defaultChecked。因为如果使用checked,最终值永远不会改变,但 defaultChecked 只是在 react 的初始渲染中加载。

    <div key={item.value} className="mb-2">
        <Form.Check
            type="radio"
            label={item.label}
            name="exp"
            defaultChecked={filter.exp === item.value}
            onChange={handleRadioChange}
            value={item.value}
        />
    </div>
    

    【讨论】:

    • 谢谢,它成功了,但是你能告诉我为什么我们应该使用 defaultChecked 而不是在 jsx 中签入?
    • 因为如果使用 checked 最终值永远不会改变,但 defaultChecked 加载只是在初始渲染中反应。
    猜你喜欢
    • 2015-03-19
    • 2012-06-10
    • 1970-01-01
    • 2021-06-20
    • 2012-01-08
    • 1970-01-01
    • 2015-07-25
    • 2021-10-04
    • 2013-08-04
    相关资源
    最近更新 更多