You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将React表单单选框的字符串值转换为布尔值?

解决表单Radio值从字符串转布尔类型的问题

方案1:在 onChange 处理时转换

修改你的setFormData函数,针对status字段单独处理值的类型:

const setFormData = (e) => {
  const { name, value } = e.target;
  // 对status字段进行布尔转换,其他字段保持原有值
  const processedValue = name === 'status' ? value === 'true' : value;
  // 假设你用useState维护表单数据,这里以函数式更新为例
  setForm(prevForm => ({ ...prevForm, [name]: processedValue }));
};

方案2:在提交请求前转换

如果不想修改 onChange 逻辑,可以在handleSubmit里处理数据后再发送请求:

const handleSubmit = (e) => {
    e.preventDefault();
    if (Object.keys(formData).length == 0)
      return console.log("Don't Have Form Data");
    // 转换status为布尔类型
    const submitData = {
      ...formData,
      status: formData.status === 'true'
    };
    console.log(submitData);
    axios.post(url, submitData);
};

方案3:使用自定义数据属性存储布尔值

修改Radio输入框的属性,用data-value存储布尔值,再在 onChange 时解析:

<div className="items-center ">
  <label>Status</label>
  <div className="form-check">
    <input
      type="radio"
      onChange={setFormData}
      data-value={true}
      id="radioDefault1"
      name="status"
      className="form-check-input appearance-none rounded-full h-4 w-4 border border-gray-300 bg-white checked:bg-green-500 checked:border-green-500 focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer"
    ></input>
    <label htmlFor="radioDefault1" className="inline-block text-gray-600">
      Active
    </label>
  </div>
  <div className="form-check">
    <input
      type="radio"
      onChange={setFormData}
      data-value={false}
      id="radioDefault2"
      name="status"
      className="form-check-input appearance-none rounded-full h-4 w-4 border border-gray-300 bg-white checked:bg-green-500 checked:border-green-500 focus:outline-none transition duration-200 mt-1 align-top bg-no-repeat bg-center bg-contain float-left mr-2 cursor-pointer"
    ></input>
    <label htmlFor="radioDefault2" className="inline-block text-gray-600">
      Inactive
    </label>
  </div>
</div>

对应的setFormData函数:

const setFormData = (e) => {
  const { name, dataset } = e.target;
  const value = name === 'status' ? JSON.parse(dataset.value) : e.target.value;
  setForm(prevForm => ({ ...prevForm, [name]: value }));
};

内容的提问来源于stack exchange,提问作者Teddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:40:36