Vue vs React:Tree组件实现的比较分析

198 阅读1分钟

Tree组件是一种常见的UI元素,用于展示层次化的数据结构。在Vue和React中实现Tree组件的方法各有不同,但都依赖于组件的递归使用。下面将分别介绍在Vue和React中如何实现Tree组件。

Vue中实现Tree组件

在Vue中,我们可以通过创建一个可递归的子组件来实现Tree。

  1. 创建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>
    
  2. 创建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>
    
  3. 在父组件中使用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组件。

  1. 创建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;
    
  2. 在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组件。这些组件可以根据实际需求进行进一步的样式定制和功能扩展。