当前位置:首页 > React

react实现穿梭框

2026-01-27 03:37:28React

React 实现穿梭框组件

穿梭框(Transfer)是常见的 UI 组件,用于在两栏之间移动选项。以下是实现方案:

基础结构设计

使用两个并排的列表展示可选项和已选项,中间放置操作按钮:

<div className="transfer-container">
  <List title="源列表" items={sourceItems} />
  <div className="transfer-buttons">
    <button onClick={moveToRight}>{">"}</button>
    <button onClick={moveToLeft}>{"<"}</button>
  </div>
  <List title="目标列表" items={targetItems} />
</div>

状态管理

使用 React 的 useState 管理数据状态:

const [sourceItems, setSourceItems] = useState([
  { id: 1, label: '选项1' },
  { id: 2, label: '选项2' }
]);
const [targetItems, setTargetItems] = useState([]);
const [selectedKeys, setSelectedKeys] = useState({
  source: [],
  target: []
});

列表组件实现

创建可复用的列表组件,支持多选:

const List = ({ title, items, onSelect }) => (
  <div className="transfer-list">
    <h4>{title}</h4>
    <ul>
      {items.map(item => (
        <li 
          key={item.id}
          className={selectedKeys.includes(item.id) ? 'selected' : ''}
          onClick={() => onSelect(item.id)}
        >
          {item.label}
        </li>
      ))}
    </ul>
  </div>
);

移动逻辑实现

实现选项在左右列表间的移动:

const moveToRight = () => {
  const movingItems = sourceItems.filter(
    item => selectedKeys.source.includes(item.id)
  );
  setSourceItems(sourceItems.filter(
    item => !selectedKeys.source.includes(item.id)
  ));
  setTargetItems([...targetItems, ...movingItems]);
  setSelectedKeys({...selectedKeys, source: []});
};

完整功能增强

添加全选/清空、搜索过滤等增强功能:

// 全选当前列表
const selectAll = (type) => {
  setSelectedKeys({
    ...selectedKeys,
    [type]: items[type].map(item => item.id)
  });
};

// 搜索过滤
const [searchText, setSearchText] = useState('');
const filteredItems = items.filter(
  item => item.label.includes(searchText)
);

样式优化

添加基础 CSS 样式提升交互体验:

.transfer-container {
  display: flex;
  gap: 16px;
}

.transfer-list {
  border: 1px solid #ddd;
  width: 200px;
  height: 300px;
  overflow-y: auto;
}

.transfer-list li.selected {
  background-color: #e6f7ff;
}

.transfer-buttons {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

第三方库方案

如需快速实现,可使用现成组件库:

  • Ant Design Transfer 组件
  • React-Transfer 开源组件
  • Material-UI 相关实现

性能优化

对于大数据量场景:

react实现穿梭框

  • 使用虚拟滚动技术
  • 添加分页加载功能
  • 实现懒加载机制

以上方案可根据实际需求组合使用,构建功能完善的穿梭框组件。

标签: react
分享给朋友:

相关文章

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 在项目根目录的 package.json 文件中查看 dependencies 或 devDependencies 下的 react 和…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

react如何重新加载

react如何重新加载

重新加载当前页面 在React中重新加载当前页面可以通过window.location.reload()方法实现。该方法会强制浏览器重新加载当前URL,类似于按下F5刷新页面。 const relo…

如何运行react项目

如何运行react项目

运行React项目的步骤 确保已安装Node.js(建议版本12或更高)和npm/yarn。若未安装,可从Node.js官网下载。 全局安装create-react-app脚手架工具(若已安装可跳过…

react elementUI

react elementUI

React 和 Element UI 是两个不同的技术栈,但可以通过整合实现类似功能。以下是相关解决方案和替代方案: React 与 Element UI 的替代方案 Element UI 是为 V…

react 如何使用 apply

react 如何使用 apply

使用 apply 方法的基本概念 在 JavaScript 中,apply 是函数原型上的方法,用于调用函数时指定 this 的值和传递参数数组。React 中可以使用 apply 来绑定组件方法或调…