当前位置:首页 > React

react 实现全选

2026-01-26 13:05:41React

实现全选功能的基本思路

在React中实现全选功能通常涉及以下关键点:维护一个状态数组记录选中项,通过复选框的checked属性绑定状态,全选按钮控制所有子选项的选中状态。

定义组件状态

使用useState钩子管理两个状态:items表示所有可选项的数据,selectedItems记录被选中的项ID。

const [items, setItems] = useState([
  { id: 1, name: 'Item 1' },
  { id: 2, name: 'Item 2' },
  { id: 3, name: 'Item 3' }
]);
const [selectedItems, setSelectedItems] = useState([]);

全选复选框逻辑

全选复选框的onChange事件需要处理两种场景:全选时将所有项ID加入数组,取消全选时清空数组。

const handleSelectAll = (e) => {
  if (e.target.checked) {
    setSelectedItems(items.map(item => item.id));
  } else {
    setSelectedItems([]);
  }
};

单个选项复选框逻辑

单个选项的选中状态通过检查其ID是否存在于selectedItems数组中确定,切换选中状态时更新数组。

const handleCheckboxChange = (itemId) => {
  setSelectedItems(prev => 
    prev.includes(itemId) 
      ? prev.filter(id => id !== itemId)
      : [...prev, itemId]
  );
};

渲染复选框列表

全选复选框的checked状态通过比较选中数组长度与总项数确定,每个子选项绑定对应的处理函数。

<div>
  <label>
    <input
      type="checkbox"
      checked={selectedItems.length === items.length}
      onChange={handleSelectAll}
    />
    全选
  </label>

  {items.map(item => (
    <div key={item.id}>
      <label>
        <input
          type="checkbox"
          checked={selectedItems.includes(item.id)}
          onChange={() => handleCheckboxChange(item.id)}
        />
        {item.name}
      </label>
    </div>
  ))}
</div>

性能优化建议

对于大型列表,考虑使用useMemo优化渲染,或改用不可变数据库如Immer。若需要持久化选中状态,可将数据保存在上下文或状态管理工具中。

完整组件示例

import React, { useState } from 'react';

function SelectAllDemo() {
  const [items] = useState([
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' }
  ]);
  const [selectedItems, setSelectedItems] = useState([]);

  const handleSelectAll = (e) => {
    setSelectedItems(e.target.checked ? items.map(item => item.id) : []);
  };

  const handleCheckboxChange = (itemId) => {
    setSelectedItems(prev => 
      prev.includes(itemId) 
        ? prev.filter(id => id !== itemId)
        : [...prev, itemId]
    );
  };

  return (
    <div>
      <label>
        <input
          type="checkbox"
          checked={selectedItems.length === items.length}
          onChange={handleSelectAll}
        />
        全选
      </label>

      {items.map(item => (
        <div key={item.id}>
          <label>
            <input
              type="checkbox"
              checked={selectedItems.includes(item.id)}
              onChange={() => handleCheckboxChange(item.id)}
            />
            {item.name}
          </label>
        </div>
      ))}
    </div>
  );
}

react 实现全选

标签: 全选react
分享给朋友:

相关文章

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官方…

react如何遍历

react如何遍历

遍历数组或对象的方法 在React中,遍历数组或对象通常用于渲染列表或动态生成内容。以下是几种常见的遍历方法: 使用map遍历数组map是遍历数组并返回新数组的高阶函数,适合渲染列表。…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react…