当前位置:首页 > 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 编辑功能的实现方法 1. 数据绑定与表单处理 使用 v-model 实现双向数据绑定,将表单输入与 Vue 实例的数据属性关联。例如: <template> <inp…

vue实现答题功能

vue实现答题功能

Vue实现答题功能 数据准备 创建一个包含题目、选项和正确答案的数据结构,通常是一个数组对象。每个题目对象包含问题文本、选项数组和正确答案索引。 const questions = [ {…

vue实现选择全选

vue实现选择全选

Vue 实现全选功能 全选功能通常用于表格或列表,允许用户一键选中所有选项。以下是基于 Vue 的实现方法: 基础实现方式 <template> <div>…

vue实现计时功能

vue实现计时功能

使用 Vue 实现计时功能 在 Vue 中实现计时功能可以通过多种方式完成,以下是几种常见的实现方法。 使用 setInterval 实现基础计时器 通过 setInterval 创建一个计时器,并…

vue实现小功能

vue实现小功能

Vue.js 是一个渐进式 JavaScript 框架,适合实现各种小型功能。以下是几个常见小功能的实现方法: 计数器功能 通过 Vue 的响应式数据绑定实现简单的计数器: <tem…

vue实现预约功能

vue实现预约功能

Vue实现预约功能的基本步骤 使用Vue实现预约功能需要结合前端交互、表单验证和后端数据存储。以下是实现预约功能的核心方法: 创建预约表单组件 开发一个Vue组件包含日期选择器、时间选择器、姓名、联…