【金典面试题】Vue与React实现Tree

简介: 【金典面试题】Vue与React实现Tree

实现vue Tree展示样式

1、 创建tree可循环的子组件(tree-child)

<template>
    <li>
        <span @click="toggle">
            <i v-if="hasChild" class="icon">{
  {open ? '-' : '+'}}</i>
            {
  { data.name }}
        </span>
        <ul v-show="open" v-if="hasChild">
            <tree-child v-for="(item, index) in data.children" :data="item" :key="index"></tree-child>
        </ul>
    </li>
</template>

<script>
export default {
    name: 'TreeChild',
    props: {
        data: {
            type: [Object, Array],
            required: true
        }
    },
    data() {
        return {
            open: false
        }
    },
    computed: {
        hasChild() {
            return this.data.children && this.data.children.length
        }
    },
    methods: {
        toggle() {
            if(this.hasChild) {
                this.open = !this.open
            }
        }
    }
}
</script>

2、赋值数据(tree)

<template>
    <div class="tree-menu">
        <ul v-for="item in data">
            <tree-child :data="item"></tree-child>
        </ul>
    </div>
</template>

<script>
import TreeChild from './tree-child'
export default {
    props: {
        data: {
            type: [Object, Array],
            required: true
        }
    },
    components: {
        TreeChild
    }
}
</script>

3、component引用

<template>
   <tree :data="treeData"></tree>
</template>

<script>
import Tree from './tree'
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

1、创建Tree

import React, {Component} from 'react';

export default class Tree extends Component {
    constructor(props) {
        super(props)
        this.state = {
            data: this.props.data || []
        }
    }

    markTreeChild(data) {
        let tree;
        if (Object.prototype.toString.call(data) == "[object Array]") {
            tree = data.map((item) => {
                let treeChild = (<li key={this.count++}>{item.text}</li>)
                if (item.children && item.children.length) {
                    treeChild = (<li key={this.count++}>
                        <span>{item.text}</span>
                        {this.markTreeChild(item.children)}
                    </li>)
                }
                return treeChild
            })
        }
        return (
            <ul>{tree}</ul>
        )
    }

    render() {
        this.count = 0
        return this.markNode(this.state.data)
    }
}

2、component

<Tree data={[{
    'name': '人员管理',
    'children': [{
        'name': '分组1',
        'children': [{
            'name': '人员1'
        }, {
            'name': '人员2'
        }, {
            'name': '人员3'
        }]
    }, {
        'name': '分组2'
    }, {
        'name': '分组3'
    }]
}, {
    'name': '基础档案',
}, {
    'name': '送货管理'
}]}/>
目录
相关文章
|
11天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
13天前
|
开发框架 缓存 前端开发
|
15天前
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
|
15天前
|
JavaScript 前端开发 API
Vue与React数据流设计比较:响应式与单向数据流
Vue与React数据流设计比较:响应式与单向数据流
|
24天前
|
JavaScript 前端开发 开发者
你知道 React 和 Vue 的区别?
【4月更文挑战第16天】React与Vue是两种流行的前端框架,各有特色。React是JavaScript库,强调组件化和函数式编程,使用虚拟DOM提升性能;Vue是渐进式框架,提供全面解决方案,更易上手。React采用单向数据流和状态管理库如Redux,Vue则有双向数据绑定和响应式系统。组件通信方面,React依赖props和context,Vue更灵活,提供插槽和提供/注入。虚拟DOM实现上,React注重效率,Vue强调易用性。学习曲线方面,React社区活跃但学习难度稍大,Vue文档清晰,易于入门。选择框架应考虑项目需求、团队技能和个人偏好。
9 0
|
29天前
|
JavaScript 前端开发
【干货分享】选择 Vue 还是 React?项目框架选择的实际分析
【干货分享】选择 Vue 还是 React?项目框架选择的实际分析
|
1月前
|
前端开发 JavaScript API
Vue和React,哪个更适合做电商
【4月更文挑战第10天】Vue和React是电商网站开发的热门框架。Vue以其简单易用、响应式数据绑定和完善的生态系统受到青睐;而React凭借强大的组件化、卓越性能及丰富生态脱颖而出。选择取决于项目需求、团队技术栈和性能要求。在决定前,可进行技术调研和原型开发。
25 3
|
1月前
|
JavaScript 前端开发 API
Vue,React,AngularJS,各个优缺点?
【4月更文挑战第10天】Vue、React和AngularJS是三大主流前端框架,各具特色。Vue以其简单易用和组件化深受喜爱,但生态系统相对较小;React以强大的组件化和虚拟DOM技术提供高性能,但学习曲线较陡;AngularJS功能全面,支持双向数据绑定,但学习成本高且可能存在性能问题。选择框架应根据项目需求和技术栈综合考虑。
21 3
|
1月前
|
JavaScript 前端开发
vue和react的区别
vue和react的区别
|
1月前
|
JavaScript 前端开发 编译器
Vue和React的运行机制
Vue和React的运行机制
12 0