当前位置:首页 > React

react实现全选功能

2026-01-27 06:11:44React

实现全选功能的基本思路

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

使用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([]);

全选复选框逻辑

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

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简化状态更新逻辑。

react实现全选功能

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中实现全选功能通常需要以下核心逻辑:维护一个数组存储选中项的状态,通过计算属性判断是否全选,并通过方法切换全选状态。 数据准备 创建包含可选项目的数据和存储选中状态的…

php实现linux关机重启功能

php实现linux关机重启功能

通过PHP执行Linux关机或重启命令 PHP可以通过exec()、shell_exec()或system()等函数调用系统命令实现关机或重启功能,但需注意权限问题。 使用exec函数执行命令 //…

vue实现全选下载

vue实现全选下载

Vue 实现全选下载功能 要实现 Vue 中的全选下载功能,需要结合前端文件选择和下载逻辑。以下是一个完整的实现方案: 全选逻辑实现 在 Vue 组件中声明数据和方法: data() { re…

php购物车功能实现

php购物车功能实现

数据库设计 购物车功能通常需要设计数据库表来存储商品和用户信息。常见的表包括: products 表:存储商品信息,如商品ID、名称、价格、库存等。 users 表:存储用户信息,如用户ID、用户名…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

vue实现多选 全选

vue实现多选 全选

实现多选和全选功能 在Vue中实现多选和全选功能可以通过以下方式完成。假设有一个列表数据,需要实现勾选部分项或一键全选。 数据准备 定义一个数据列表和选中项的数组,以及全选状态。 data…