当前位置:首页 > React

react实现全选功能

2026-01-27 06:11:44React

实现全选功能的基本思路

在React中实现全选功能通常涉及以下关键点:维护一个状态数组存储选中项,通过全选复选框控制所有子项的选中状态,并处理子项变化时同步更新全选状态。

使用useState管理状态

定义两个状态:items存储数据列表,selectedItems存储被选中的ID数组。全选复选框的状态通过比较两者长度确定。

react实现全选功能

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

全选复选框逻辑

全选复选框的checked属性通过比较选中项长度与总项数确定,onChange事件切换全选/取消全选。

react实现全选功能

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

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

单个复选框逻辑

单个复选框的checked属性检查当前ID是否在选中数组中,onChange事件更新选中状态数组。

const handleItemSelect = (id) => (e) => {
  if (e.target.checked) {
    setSelectedItems([...selectedItems, id]);
  } else {
    setSelectedItems(selectedItems.filter(itemId => itemId !== id));
  }
};

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

优化性能(可选)

对于大型列表,可使用useMemo记忆计算结果,或考虑使用不可变数据库如Immer简化状态更新逻辑。

const isAllSelected = useMemo(
  () => selectedItems.length === items.length,
  [selectedItems, items]
);

完整组件示例

import React, { useState, useMemo } from 'react';

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

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

  const handleItemSelect = (id) => (e) => {
    if (e.target.checked) {
      setSelectedItems([...selectedItems, id]);
    } else {
      setSelectedItems(selectedItems.filter(itemId => itemId !== id));
    }
  };

  const isAllSelected = useMemo(
    () => selectedItems.length === items.length && items.length > 0,
    [selectedItems, items]
  );

  return (
    <div>
      <label>
        <input
          type="checkbox"
          checked={isAllSelected}
          onChange={handleSelectAll}
        />
        Select All
      </label>

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

标签: 全选功能
分享给朋友:

相关文章

vue实现收货功能

vue实现收货功能

Vue实现收货功能的基本思路 收货功能通常涉及前端界面交互、后端数据更新和状态管理。在Vue中,可以通过组件化开发实现这一功能,结合API调用与状态管理工具(如Vuex或Pinia)。 创建收货按…

vue 实现筛选功能

vue 实现筛选功能

实现筛选功能的基本思路 在Vue中实现筛选功能通常涉及以下几个核心步骤:数据绑定、筛选逻辑处理、结果展示。以下是具体实现方法。 数据准备 准备需要筛选的数据源,通常是一个数组,可以存储在Vue组件…

vue实现审核功能

vue实现审核功能

实现审核功能的基本思路 审核功能通常涉及状态管理、权限控制和操作记录。Vue中可以通过组件化设计、状态管理库(如Vuex或Pinia)和后端API配合实现。 审核状态管理 使用Vuex或Pinia存…

vue实现名字查找功能

vue实现名字查找功能

实现名字查找功能 在Vue中实现名字查找功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用v-model和computed属性 创建一个输入框,使用v-model绑定输入的值,通过com…

vue全选实现

vue全选实现

Vue 全选实现方法 使用 v-model 绑定复选框 在 Vue 中,可以通过 v-model 绑定复选框的状态。全选功能可以通过一个主复选框控制多个子复选框的状态。 <templa…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…