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

ReactJS中如何判断值存在于数组时将对应Checkbox设为选中状态

问题根因

你代码里的核心问题是类型不匹配:

  • 待渲染的尺码数组[40,41,42,43,44,45]里的元素是number类型
  • 状态productForm.sizes里存储的元素是string类型
    JS的Array.includes()方法用的是严格相等(===)判断,41 === "41"结果为false,所以checked属性始终不生效。

解决方案

方案1:统一状态存储的类型为数字

直接把状态里的sizes改成数字数组即可:

const [productForm, setProductForm] = useState({
    sizes: [41, 42, 43], // 把字符串元素改为数字类型
});

方案2:判断时做类型转换

如果不想改动状态的存储格式,在判断includes的时候统一转成相同类型即可:

checked={productForm.sizes.includes(String(size))}

补充:配套的handleCheckBox实现

为了避免后续操作再次出现类型不匹配问题,这里给出标准的复选框变更处理逻辑:

const handleCheckBox = (e) => {
  // 此处转数字/字符串和你状态存储的类型保持一致即可,这里以转数字为例
  const currentVal = Number(e.target.value);
  setProductForm(prev => {
    const newSizes = prev.sizes.includes(currentVal) 
      ? prev.sizes.filter(item => item !== currentVal) // 已选中则移除该值
      : [...prev.sizes, currentVal]; // 未选中则新增该值
    return {
      ...prev,
      sizes: newSizes
    }
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:18:02