当前位置:首页 > 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;

仅实现单选功能

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

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如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

vue实现div单选

vue实现div单选

Vue 实现 div 单选 在 Vue 中实现 div 单选可以通过 v-model 结合 v-for 和事件绑定来完成。以下是具体实现方法: 模板部分 <template>…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

vue 实现单选

vue 实现单选

实现单选功能的方法 在Vue中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用v-model绑定单选按钮 通过v-model可以轻松实现单选功能。将v-model绑定到一个变量,单选…

vue实现 单选

vue实现 单选

实现 Vue 单选功能 在 Vue 中实现单选功能可以通过多种方式完成,常见的有使用原生 HTML 的 <input type="radio"> 结合 Vue 的数据绑定,或使用第三方 U…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…