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

React中如何实现数组仅一个对象的isActive属性为true其余为false

修改方案

1. 修正事件处理函数

你现有代码只修改了当前选中项的属性,没有处理其余项的重置逻辑,另外还存在参数变量名写错的问题(入参是id,但查找时用了未定义的photoId),修改后的代码如下:

const handleDefaultPhotoOnTable = (id, e) => {
  const isChecked = e.target.checked;
  // 遍历所有条目,仅匹配id的项使用当前复选框状态,其余全部强制设为false
  const updatedPhotos = photos.map(photo => ({
    ...photo,
    isActive: photo.id === id ? isChecked : false
  }));
  setPhotos(updatedPhotos);
};

2. 修正渲染代码的已知问题

你现有循环渲染时给input写死了id='defaultId',会导致页面出现重复id,建议修改为动态生成的唯一值:

<tbody>
  {
    photos.map((photo) => (
      <tr key={photo.id}>
        <td>{photo.name}</td>
        <td className="text-center">
          <input 
            onChange={(e) => { handleDefaultPhotoOnTable(photo.id, e); }} 
            name='isActive' 
            checked={photo.isActive} 
            type='checkbox' 
            id={`photo-${photo.id}`} 
          />
        </td>
      </tr>
    ))
  }
</tbody>

额外注意事项

你定义的初始photos数组里有两个id为3的对象,会导致查找匹配、渲染key重复的问题,建议先把id修正为唯一值。

内容的提问来源于stack exchange,提问作者Sakhawat Hossain Sohel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:48:03