【金典面试题】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': '送货管理'
}]}/>
目录
相关文章
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
JavaScript 前端开发 数据处理
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
这篇文章讨论了Vue中实现权限管理的策略,包括接口权限、路由权限、菜单权限和按钮权限的控制方法,并提供了不同的实现方案及代码示例,以确保用户只能访问被授权的资源。
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。
|
缓存 JavaScript 前端开发
vue面试题
vue面试题
301 64
|
JavaScript 安全 前端开发
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
这篇文章介绍了Vue项目中解决跨域问题的方法,包括使用CORS设置HTTP头、通过Proxy代理服务器进行请求转发,以及在vue.config.js中配置代理对象的策略。
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
|
JavaScript 前端开发 编译器
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
这篇文章介绍了Vue 3相对于Vue 2的改进和新增特性,包括性能提升、体积减小、更易维护、更好的TypeScript支持、新的Composition API、新增的Teleport和createRenderer功能,以及Vue 3中的非兼容性变更和API的移除或重命名。
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
|
开发框架 前端开发 JavaScript
React、Vue.js 和 Angular主流前端框架和选择指南
在当今的前端开发领域,选择合适的框架对于项目的成功至关重要。本文将介绍几个主流的前端框架——React、Vue.js 和 Angular,探讨它们各自的特点、开发场景、优缺点,并提供选择框架的建议。
462 6
|
JavaScript 前端开发 API
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
这篇文章讨论了Vue项目中错误的处理方式,包括后端接口错误和代码逻辑错误的处理策略。文章详细介绍了如何使用axios的拦截器处理后端接口错误,以及Vue提供的全局错误处理函数`errorHandler`和生命周期钩子`errorCaptured`来处理代码中的逻辑错误。此外,还分析了Vue错误处理的源码,解释了`handleError`、`globalHandleError`、`invokeWithErrorHandling`和`logError`函数的作用和处理流程。
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
|
前端开发 JavaScript 开发者
React 和 Vue.js 框架的区别是什么?
React 和 Vue.js 框架的区别是什么?
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
194 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】