当前位置:首页 > React

react实现单选反选

2026-01-27 12:18:20React

实现单选和反选功能

在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;

使用自定义钩子封装逻辑

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

react实现单选反选

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.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

react如何重置

react如何重置

重置 React 应用的状态 使用 useState 钩子重新初始化状态变量是最直接的方法。将状态变量重置为初始值或空值即可完成重置。 const [count, setCount] = useSt…

如何调试react

如何调试react

调试 React 应用的方法 使用 React Developer Tools 安装浏览器扩展(Chrome/Firefox),通过组件树查看组件状态、props 和 hooks。支持实时编辑 pro…

如何升级react native

如何升级react native

升级 React Native 的步骤 检查当前版本 运行以下命令查看当前项目的 React Native 版本: react-native --version 更新 React Native CL…

react 如何修改state

react 如何修改state

修改 state 的基础方法 在 React 中,state 的修改必须通过 setState 方法(类组件)或 state 更新函数(函数组件)。直接修改 state 会导致组件不会重新渲染,且可能…