当前位置:首页 > React

react原生实现多选全选

2026-01-27 20:05:36React

React 实现多选和全选功能

在 React 中实现多选和全选功能可以通过状态管理来控制选中项的状态。以下是具体的实现方法:

定义状态和初始化数据

使用 useState 钩子来管理选中状态和数据列表。假设有一个列表 items,每个项有一个唯一标识 id 和一个 checked 属性表示是否选中。

const [items, setItems] = useState([
  { id: 1, name: 'Item 1', checked: false },
  { id: 2, name: 'Item 2', checked: false },
  { id: 3, name: 'Item 3', checked: false }
]);
const [selectAll, setSelectAll] = useState(false);

实现单个项的选择

为每个列表项添加一个复选框,并通过 onChange 事件更新选中状态。

const handleItemCheck = (id) => {
  setItems(items.map(item => 
    item.id === id ? { ...item, checked: !item.checked } : item
  ));
};

实现全选功能

全选按钮的 onChange 事件会切换所有项的选中状态。

const handleSelectAll = () => {
  setSelectAll(!selectAll);
  setItems(items.map(item => ({ ...item, checked: !selectAll })));
};

渲染列表和全选按钮

在组件中渲染列表项和全选按钮,绑定对应的事件处理函数。

return (
  <div>
    <label>
      <input 
        type="checkbox" 
        checked={selectAll} 
        onChange={handleSelectAll} 
      />
      Select All
    </label>
    <ul>
      {items.map(item => (
        <li key={item.id}>
          <label>
            <input 
              type="checkbox" 
              checked={item.checked} 
              onChange={() => handleItemCheck(item.id)} 
            />
            {item.name}
          </label>
        </li>
      ))}
    </ul>
  </div>
);

动态更新全选状态

当用户手动选择所有项时,全选按钮应自动勾选。可以在 useEffect 中监听 items 的变化。

useEffect(() => {
  const allChecked = items.every(item => item.checked);
  setSelectAll(allChecked);
}, [items]);

完整代码示例

以下是一个完整的 React 组件示例,实现了多选和全选功能:

react原生实现多选全选

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

function MultiSelect() {
  const [items, setItems] = useState([
    { id: 1, name: 'Item 1', checked: false },
    { id: 2, name: 'Item 2', checked: false },
    { id: 3, name: 'Item 3', checked: false }
  ]);
  const [selectAll, setSelectAll] = useState(false);

  const handleItemCheck = (id) => {
    setItems(items.map(item => 
      item.id === id ? { ...item, checked: !item.checked } : item
    ));
  };

  const handleSelectAll = () => {
    setSelectAll(!selectAll);
    setItems(items.map(item => ({ ...item, checked: !selectAll })));
  };

  useEffect(() => {
    const allChecked = items.every(item => item.checked);
    setSelectAll(allChecked);
  }, [items]);

  return (
    <div>
      <label>
        <input 
          type="checkbox" 
          checked={selectAll} 
          onChange={handleSelectAll} 
        />
        Select All
      </label>
      <ul>
        {items.map(item => (
          <li key={item.id}>
            <label>
              <input 
                type="checkbox" 
                checked={item.checked} 
                onChange={() => handleItemCheck(item.id)} 
              />
              {item.name}
            </label>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default MultiSelect;

注意事项

  • 确保每个列表项有唯一的 id,以便正确更新状态。
  • 使用 useEffect 监听 items 的变化,动态更新全选状态。
  • 避免直接修改状态,始终使用 setItemssetSelectAll 更新状态。

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

相关文章

jquery 多选

jquery 多选

jQuery 多选实现方法 使用 prop() 方法实现多选 通过 prop() 方法可以批量设置多个复选框的选中状态。以下是一个示例代码: $('input[type="checkbox"]').…

vue实现div多选

vue实现div多选

Vue 实现 Div 多选功能 基础实现思路 通过 Vue 的数据绑定和事件处理,可以轻松实现 div 的多选功能。核心是维护一个数组来存储选中的 div 的标识符,并通过 v-bind 和 v-on…

vue中实现全选

vue中实现全选

Vue 中实现全选功能 在 Vue 中实现全选功能可以通过以下方法完成,主要涉及表单复选框的操作和状态管理。 方法一:使用 v-model 绑定数组 准备数据 定义一组选项和一个数组用于存储选中的…

jquery 全选

jquery 全选

jQuery 全选实现方法 使用jQuery实现全选功能通常涉及监听复选框的点击事件,并根据全选按钮的状态来设置其他复选框的状态。 HTML结构示例 <input type="checkbo…

vue实现多选下拉

vue实现多选下拉

Vue 实现多选下拉 使用 Vue 实现多选下拉可以通过原生 HTML <select> 元素结合 Vue 的双向绑定,或者使用第三方组件库如 Element UI、Vuetify 等。以…

vue实现列表多选

vue实现列表多选

Vue 实现列表多选的方法 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以轻松实现多选功能。当复选框被选中或取消选中时,数组会自动更新。 <template>…