当前位置:首页 > React

react简单实现树形控件

2026-01-27 16:28:31React

实现树形控件的基本思路

树形控件的核心是递归渲染节点,每个节点可以包含子节点。通过状态管理展开/折叠状态,动态渲染可见部分。

react简单实现树形控件

基础代码结构

创建一个可复用的树形组件,包含以下关键部分:

react简单实现树形控件

import React, { useState } from 'react';

const TreeNode = ({ node }) => {
  const [isExpanded, setIsExpanded] = useState(false);

  const hasChildren = node.children && node.children.length > 0;

  return (
    <li>
      <div onClick={() => setIsExpanded(!isExpanded)}>
        {hasChildren && (
          <span>{isExpanded ? '▼' : '▶'}</span>
        )}
        {node.name}
      </div>

      {hasChildren && isExpanded && (
        <ul>
          {node.children.map(child => (
            <TreeNode key={child.id} node={child} />
          ))}
        </ul>
      )}
    </li>
  );
};

const Tree = ({ data }) => {
  return (
    <ul>
      {data.map(node => (
        <TreeNode key={node.id} node={node} />
      ))}
    </ul>
  );
};

使用示例

const treeData = [
  {
    id: 1,
    name: 'Parent 1',
    children: [
      {
        id: 2,
        name: 'Child 1',
        children: [
          { id: 3, name: 'Grandchild 1' },
          { id: 4, name: 'Grandchild 2' }
        ]
      },
      { id: 5, name: 'Child 2' }
    ]
  },
  {
    id: 6,
    name: 'Parent 2'
  }
];

function App() {
  return (
    <div>
      <h1>Tree Component</h1>
      <Tree data={treeData} />
    </div>
  );
}

样式增强

添加基础CSS样式提升视觉效果:

ul {
  list-style: none;
  padding-left: 20px;
}

li {
  margin: 5px 0;
}

div {
  cursor: pointer;
  padding: 2px 5px;
}

div:hover {
  background-color: #f0f0f0;
}

功能扩展方向

  1. 复选框支持:为每个节点添加复选框,实现全选/取消功能
  2. 搜索过滤:根据输入内容动态过滤显示匹配节点
  3. 拖拽排序:实现节点拖拽重新排序功能
  4. 异步加载:节点展开时动态加载子节点数据
  5. 自定义图标:替换默认箭头为更美观的图标

性能优化建议

对于大型树结构,考虑以下优化:

  • 虚拟滚动技术,只渲染可见区域节点
  • 使用React.memo避免不必要的重新渲染
  • 数据懒加载,初始只加载顶层节点

这种实现方式提供了树形控件的基础功能,可以根据具体需求进行扩展和定制。

标签: 控件简单
分享给朋友:

相关文章

vue实现简单的弹窗

vue实现简单的弹窗

Vue实现简单弹窗的方法 使用v-if和v-show控制显示 通过Vue的指令v-if或v-show可以轻松控制弹窗的显示与隐藏。v-if会完全销毁和重建DOM元素,而v-show仅通过CSS的d…

vue简单功能实现

vue简单功能实现

Vue 简单功能实现示例 以下是一个基于 Vue 3 的简单计数器功能实现,包含模板、脚本和样式部分: <template> <div class="counter">…

vue 实现简单登录

vue 实现简单登录

实现 Vue 简单登录功能 创建登录组件 在 Vue 项目中创建一个登录组件 Login.vue,包含用户名和密码输入框以及登录按钮。 <template> <div clas…

vue实现简单拖拽

vue实现简单拖拽

Vue 实现简单拖拽功能 在 Vue 中实现拖拽功能可以通过 HTML5 的拖放 API 或第三方库(如 vuedraggable)来完成。以下是两种常见的实现方式: 使用 HTML5 拖放 API…

vue  简单菜单实现

vue 简单菜单实现

实现简单菜单的步骤 在 Vue 中实现一个简单的菜单,可以通过以下方法完成: 使用 v-for 动态渲染菜单项 在 Vue 的模板中,使用 v-for 遍历菜单数据,动态生成菜单项。 <…

VUE实现拖拉控件

VUE实现拖拉控件

实现拖拽功能的基础方法 在Vue中实现拖拽功能可以使用HTML5的拖放API或第三方库。HTML5拖放API提供了原生支持,适用于简单场景。 使用draggable属性标记可拖拽元素: <d…