Tree组件是一种常见的UI元素,用于展示层次化的数据结构。在Vue和React中实现Tree组件的方法各有不同,但都依赖于组件的递归使用。下面将分别介绍在Vue和React中如何实现Tree组件。
Vue中实现Tree组件
在Vue中,我们可以通过创建一个可递归的子组件来实现Tree。
- 创建tree-child组件
<template> <li> <span @click="toggle"> <i v-if="hasChild" class="icon">{{ open ? '-' : '+' }}</i> {{ data.name }} </span> <ul v-if="hasChild" v-show="open"> <tree-child v-for="(child, index) in data.children" :key="index" :data="child"></tree-child> </ul> </li> </template> <script> export default { name: 'TreeChild', props: { data: { type: Object, required: true } }, data() { return { open: false } }, computed: { hasChild() { return this.data.children && this.data.children.length > 0; } }, methods: { toggle() { if (this.hasChild) { this.open = !this.open; } } } } </script> - 创建tree组件
<template> <div class="tree-menu"> <ul> <tree-child v-for="(item, index) in data" :key="index" :data="item"></tree-child> </ul> </div> </template> <script> import TreeChild from './tree-child.vue'; export default { props: { data: { type: Array, default: () => [] } }, components: { TreeChild } } </script> - 在父组件中使用tree组件
<template> <tree :data="treeData"></tree> </template> <script> import Tree from './tree.vue'; export default { components: { Tree }, data() { return { treeData: [ { name: '人员管理', children: [ { name: '分组1', children: [ { name: '人员1' }, { name: '人员2' }, { name: '人员3' } ] }, { name: '分组2' }, { name: '分组3' } ] }, { name: '基础档案' }, { name: '送货管理' } ] } } } </script>
React中实现Tree组件
在React中,我们可以通过递归渲染子节点来实现Tree组件。
- 创建Tree组件
import React, { Component } from 'react'; class Tree extends Component { constructor(props) { super(props); this.state = { data: props.data || [] }; } renderTree(data) { return data.map((item) => ( <li key={item.name}> <span>{item.name}</span> {item.children && item.children.length > 0 && ( <ul>{this.renderTree(item.children)}</ul> )} </li> )); } render() { return <ul>{this.renderTree(this.state.data)}</ul>; } } export default Tree; - 在React组件中使用Tree组件
import React from 'react'; import Tree from './Tree'; const treeData = [ { name: '人员管理', children: [ { name: '分组1', children: [ { name: '人员1' }, { name: '人员2' }, { name: '人员3' } ] }, { name: '分组2' }, { name: '分组3' } ] }, { name: '基础档案' }, { name: '送货管理' } ]; function App() { return <Tree data={treeData} />; } export default App;
通过以上步骤,我们可以在Vue和React中分别实现一个基本的Tree组件。这些组件可以根据实际需求进行进一步的样式定制和功能扩展。