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

React:如何实现点击按钮全选/取消全选复选框?

实现React复选框列表的全选/取消全选功能

核心思路

通过维护选中项ID集合的状态,配合全选/取消全选按钮的批量更新逻辑,实现对复选框列表的批量操作。

具体实现步骤

  1. 状态定义
    在组件中声明两个状态变量:
  • 存储从API获取的模板数据(templates)
  • 存储当前选中的模板ID集合(selectedTemplateIds,用Set类型更方便增删和存在性判断)
const [templates, setTemplates] = useState([]);
const [selectedTemplateIds, setSelectedTemplateIds] = useState(new Set());
  1. API数据获取
    组件挂载时调用API获取模板数据,更新templates状态:
useEffect(() => {
  // 替换为实际API请求逻辑
  const fetchTemplates = async () => {
    // 模拟返回示例数据:[{"templateID":"11","templateName":"All"},{"templateID":"21","templateName":"SC"}]
    const data = await (await fetch('你的API接口地址')).json();
    setTemplates(data);
  };
  fetchTemplates();
}, []);
  1. 全选/取消全选逻辑
  • 全选:将所有模板的templateID批量加入选中集合
  • 取消全选:直接清空选中集合
const handleSelectAll = () => {
  const allTemplateIds = new Set(templates.map(item => item.templateID));
  setSelectedTemplateIds(allTemplateIds);
};

const handleUnselectAll = () => {
  setSelectedTemplateIds(new Set());
};
  1. 单个复选框的切换逻辑
    点击单个复选框时,更新选中集合:
const handleToggleSingle = (templateId) => {
  setSelectedTemplateIds(prev => {
    const newSelectedSet = new Set(prev);
    newSelectedSet.has(templateId) 
      ? newSelectedSet.delete(templateId) 
      : newSelectedSet.add(templateId);
    return newSelectedSet;
  });
};
  1. 页面渲染
    渲染操作按钮和复选框列表:
return (
  <div>
    <button onClick={handleSelectAll}>全选</button>
    <button onClick={handleUnselectAll}>取消全选</button>
    <div className="checkbox-group">
      {templates.map(template => (
        <label key={template.templateID} style={{display: 'block', margin: '8px 0'}}>
          <input
            type="checkbox"
            checked={selectedTemplateIds.has(template.templateID)}
            onChange={() => handleToggleSingle(template.templateID)}
          />
          {template.templateName}
        </label>
      ))}
    </div>
  </div>
);

关键说明

  • 使用Set存储选中ID,比数组更高效处理增删和存在性判断
  • 单个复选框的选中状态由selectedTemplateIds集合是否包含对应ID决定
  • 全选/取消全选直接批量更新整个集合,避免循环操作单个复选框,性能更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:45:42