当前位置:首页 > React

react实现单选反选

2026-01-27 12:18:20React

实现单选和反选功能

在React中实现单选和反选功能可以通过状态管理来完成。以下是一个完整的实现示例:

react实现单选反选

import React, { useState } from 'react';

function SelectableList({ items }) {
  const [selectedItems, setSelectedItems] = useState([]);

  const toggleSelect = (item) => {
    if (selectedItems.includes(item)) {
      setSelectedItems(selectedItems.filter(i => i !== item));
    } else {
      setSelectedItems([...selectedItems, item]);
    }
  };

  const toggleSelectAll = () => {
    if (selectedItems.length === items.length) {
      setSelectedItems([]);
    } else {
      setSelectedItems([...items]);
    }
  };

  return (
    <div>
      <button onClick={toggleSelectAll}>
        {selectedItems.length === items.length ? '取消全选' : '全选'}
      </button>
      <ul>
        {items.map(item => (
          <li 
            key={item}
            onClick={() => toggleSelect(item)}
            style={{ 
              backgroundColor: selectedItems.includes(item) ? 'lightblue' : 'white',
              cursor: 'pointer'
            }}
          >
            {item}
          </li>
        ))}
      </ul>
      <p>已选择: {selectedItems.join(', ')}</p>
    </div>
  );
}

function App() {
  const items = ['苹果', '香蕉', '橙子', '葡萄'];
  return <SelectableList items={items} />;
}

export default App;

仅实现单选功能

如果只需要单选功能(不能多选),可以简化实现:

react实现单选反选

import React, { useState } from 'react';

function SingleSelectList({ items }) {
  const [selectedItem, setSelectedItem] = useState(null);

  return (
    <div>
      <ul>
        {items.map(item => (
          <li 
            key={item}
            onClick={() => setSelectedItem(item)}
            style={{ 
              backgroundColor: selectedItem === item ? 'lightblue' : 'white',
              cursor: 'pointer'
            }}
          >
            {item}
          </li>
        ))}
      </ul>
      <p>已选择: {selectedItem || '无'}</p>
    </div>
  );
}

function App() {
  const items = ['红色', '绿色', '蓝色', '黄色'];
  return <SingleSelectList items={items} />;
}

export default App;

使用自定义钩子封装逻辑

可以将选择逻辑封装为自定义钩子,提高代码复用性:

import { useState } from 'react';

function useSelection(items) {
  const [selectedItems, setSelectedItems] = useState([]);

  const toggleSelect = (item) => {
    if (selectedItems.includes(item)) {
      setSelectedItems(selectedItems.filter(i => i !== item));
    } else {
      setSelectedItems([...selectedItems, item]);
    }
  };

  const toggleSelectAll = () => {
    setSelectedItems(selectedItems.length === items.length ? [] : [...items]);
  };

  return { selectedItems, toggleSelect, toggleSelectAll };
}

function SelectableList({ items }) {
  const { selectedItems, toggleSelect, toggleSelectAll } = useSelection(items);

  return (
    <div>
      <button onClick={toggleSelectAll}>
        {selectedItems.length === items.length ? '取消全选' : '全选'}
      </button>
      <ul>
        {items.map(item => (
          <li 
            key={item}
            onClick={() => toggleSelect(item)}
            style={{ 
              backgroundColor: selectedItems.includes(item) ? 'lightblue' : 'white',
              cursor: 'pointer'
            }}
          >
            {item}
          </li>
        ))}
      </ul>
    </div>
  );
}

这些实现方式可以根据实际需求进行调整,比如添加禁用状态、多级选择等复杂功能。

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

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyfra…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何卸载

react如何卸载

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