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

React TS遍历对象时,如何为复选框设置正确的checked属性?

问题描述

在React TypeScript中遍历对象渲染复选框时,无法获取对象对应key的布尔值来设置复选框的checked属性。

当前状态定义:

const [brandState,setBrandState] = useState({
    Brands:{
        NewBalance: false,
        Nike: false,
        Addiddas: false,
        Converse:false,
        UnderArmour:false,
    },
});

遍历渲染复选框的代码:

{
  Object.keys(brandState.Brands).map((brand)=>
  <div className="">
  <label htmlFor={brand} className="mr-[10px]">{brand}: </label>
  <input type="checkbox" name={brand} className="cursor-pointer" />
  </div>
  )
}

尝试checked={brand}时因brand是字符串报错,尝试checked={brandState.Brands.brand}也报错,需要解决如何正确获取每个key对应的布尔值来设置checked属性。

解决方案

1. 正确获取动态属性的布尔值

由于brand是字符串类型的变量,不能用点语法访问对象属性,必须使用方括号语法。同时因为是TypeScript,需要添加类型断言让编译器识别brand是合法键:

checked={brandState.Brands[brand as keyof typeof brandState.Brands]}

2. 添加状态更新逻辑(必要)

要让复选框能正常切换状态,需给input添加onChange事件,通过函数式更新确保基于最新状态修改:

<input 
  type="checkbox" 
  name={brand} 
  className="cursor-pointer"
  checked={brandState.Brands[brand as keyof typeof brandState.Brands]}
  onChange={() => {
    setBrandState(prev => ({
      ...prev,
      Brands: {
        ...prev.Brands,
        [brand]: !prev.Brands[brand as keyof typeof prev.Brands]
      }
    }))
  }}
/>

完整优化后的渲染代码

{
  Object.keys(brandState.Brands).map((brand) => (
    <div key={brand} className="">
      <label htmlFor={brand} className="mr-[10px]">{brand}: </label>
      <input 
        type="checkbox" 
        id={brand} // 补充id,与label的htmlFor对应,提升交互性
        name={brand} 
        className="cursor-pointer"
        checked={brandState.Brands[brand as keyof typeof brandState.Brands]}
        onChange={() => {
          setBrandState(prev => ({
            ...prev,
            Brands: {
              ...prev.Brands,
              [brand]: !prev.Brands[brand as keyof typeof prev.Brands]
            }
          }))
        }}
      />
    </div>
  ))
}

注:给循环项添加key={brand}避免React列表渲染警告,同时补充input的id属性,让点击标签也能触发复选框状态切换。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:42:09