vue 面试题合集

vue面试题(全)

原理篇:

1,computed和watch的区别

computed 计算属性 : 依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值。

                                  对检测的值没有要求

watch 侦听器 : 更多的是「观察」的作用, 值为复合类型时,需要开启深度监听deep ,自执行一次immdeiate。

 应用场景:

当我们需要进行数值计算,并且依赖于其它数据时,应该使用 computed,因为可以利用 computed 的缓存特性,避免每次获取值时,都要重新计算。

当我们需要在数据变化时执行异步或开销较大的操作时,应该使用 watch,使用 watch 选项允许我们执行异步操作 ( 访问一个 API ),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。

2,为什么在 Vue3.0 采用了 Proxy,抛弃了 Object.defineProperty

Object.defineProperty 本身有一定的监控到数组下标变化的能力,但是在 Vue 中,从性能/体验的性价比考虑,尤大大就弃用了这个特性(Vue 为什么不能检测数组变动 )。为了解决这个问题,经过 vue 内部处理后可以使用以下几种方法来监听数组

push();pop();shift();unshift();splice();sort();reverse();

由于只针对了以上 7 种方法进行了 hack 处理,所以其他数组的属性也是检测不到的,还是具有一定的局限性。

Object.defineProperty 只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。Vue 2.x 里,是通过 递归 + 遍历 data 对象来实现对数据的监控的,如果属性值也是对象那么需要深度遍历,显然如果能劫持一个完整的对象是才是更好的选择。
Proxy 可以劫持整个对象,并返回一个新的对象。Proxy 不仅可以代理对象,还可以代理数组。还可以代理动态增加的属性。

3,Vue 中的 key 到底有什么用?

key 是给每一个 vnode 的唯一 id,依靠 key,我们的 diff 操作可以更准确、更快速 (对于简单列表页渲染来说 diff 节点也更快,但会产生一些隐藏的副作用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现状态错位。)

diff 算法的过程中,先会进行新旧节点的首尾交叉对比,当无法匹配的时候会用新节点的 key 与旧节点进行比对,从而找到相应旧节点.

更准确 : 因为带 key 就不是就地复用了,在 sameNode 函数 a.key === b.key 对比中可以避免就地复用的情况。所以会更加准确,如果不加 key,会导致之前节点的状态被保留下来,会产生一系列的 bug。

更快速 : key 的唯一性可以被 Map 数据结构充分利用,相比于遍历查找的时间复杂度 O(n),Map 的时间复杂度仅仅为 O(1),源码如下:

4,Vue 组件 data 为什么必须是函数 ?

new Vue()实例中,data 可以直接是一个对象,为什么在 vue 组件中,data 必须是一个函数呢?

因为组件是可以复用的,JS 里对象是引用关系,如果组件 data 是一个对象,那么子组件中的 data 属性值会互相污染,产生副作用。

所以一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝。new Vue 的实例是不会被复用的,因此不存在以上问题。

5.vue.cli项目中src目录每个文件夹和文件的用法?

assets文件夹是放静态资源;
components是放组件;
router是定义路由相关的配置;
view视图;
app.vue是一个应用主组件;
main.js是入口文件

6.Vue组件之全局组件与局部组件的使用详解

全局组件

main.js中引入并全局注册组件

局部组件
具体页面中引入并声明组件,template中添加组件

1. 计算属性和 watch 的区别computed 是一个对象时,它有哪些选项?computed 和 methods 有什么区别?computed 是否能依赖其它组件的数据?watch 是一个对象时,它有哪些选项?

答:

  1. 计算属性是自动监听依赖值的变化,从而动态返回内容,监听是一个过程,在监听的值变化时,可以触发一个回调,并做一些事情。
    所以区别来源于用法,只是需要动态值,那就用计算属性;需要知道值的改变后执行业务逻辑,才用 watch,用反或混用虽然可行,但都是不正确的用法。
  2. 有get和set两个选项
  3. methods是一个方法,它可以接受参数,而computed不能,computed是可以缓存的,methods不会。
  4. computed可以依赖其他computed,甚至是其他组件的data
  5. watch 配置
    handler
    deep 是否深度
    immeditate 是否立即执行

2. active-class是哪个组件的属性?嵌套路由怎么定义?怎么定义vue-router的动态路由?怎么获取传过来的动态参数?vue-router有哪几种导航钩子?

1.  vue-router模块的router-link组件。

2.  在 VueRouter 的参数中使用 children 配置

3. 在router目录下的index.js文件中,对path属性加上/:id。
4. 使用router对象的params.id。

5.有三种:

第一种全局导航钩子router.beforeEach(to,from,next)作用跳转前进行判断拦截。
第二种:组件内的钩子
第三种:单独路由独享组件

3. 什么是vue生命周期?vue生命周期的作用是什么?vue生命周期总共有几个阶段?第一次页面加载会触发哪几个钩子?DOM 渲染在哪个周期中就已经完成?简单描述每个周期具体适合哪些场景?

1. Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

2. 它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

3. 它可以总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后

4. 第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子

5. DOM 渲染在 mounted 中就已经完成了

6. 生命周期钩子的一些使用方法: beforecreate : 可以在这加个loading事件,在加载实例时触发 created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用 mounted : 挂载元素,获取到DOM节点 updated : 如果对数据统一处理,在这里写上相应函数 beforeDestroy : 可以做一个确认停止事件的确认框 nextTick : 更新数据后立即操作dom

4. vue组件的scoped属性的作用?原理?nextTick的原理?以及优点?

  1. 作用:在style标签上添加scoped属性,以表示它的样式作用于当下的模块,很好的实现了样式私有化的目的
  2. 原理:使用 PostCSS 来实现转换,通过给 dom 增加一个动态属性,然后 css 选择器也额外添加对应的属性来选择该 dom ,达到该样式只作用于含有该属性的 dom,实现组件样式的模块
  3. 将回调延迟到下次dom更细循环之后执行。在修改数据之后立即使用它,然后等待dom更新。(当data中的某个属性改变的时候,这个值并不是立即渲染到页面上的,而是先放到watcher队列上(异步),只有当前任务空闲的时候才会去执行watcher队列上的任务。)
  4. 优点:相对未来更新后的视图进行操作,我们只需要把要执行的函数传递给this.$nextTick方法

5. vue slot 具体用法 你项目怎么使用slot?vue的diff算法?Vue中的key有什么作用?

1. slot用于封装组件中,写在子组件 接收父组件动态传递子组件内容片断,slot插槽的使用方法其实就是类似于一个子组件或者标签的引用的过程,在父组件里面定义一个slot,起个name,然后组件引入到子组件,子组件里面有个元素的属性slot值等于name,然后父组件里面没有值的时候就可以显示子组件里面的信息了

6,父组件调用子组件方法

<Login ref="Login" v-show="loginstate"></Login>
//事件中直接调用即可
hello() {console.log('子组件加载完成')// 去调用子组件事件,同样也可以用点击事件执行this.$refs.Login.fn()
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

40 张图 详解 Docker 容器监控

作者 | 飞向星的客机来源 | CSDN博客前言在企业中&#xff0c;通常业务是不允许随意停止的&#xff0c;否则将给企业带来巨大的经济损失。运维工程师要保证业务正常运行&#xff0c;就必须利用工具时刻监控业务的运行状态&#xff0c;容器中的业务也不例外。除了容器自身的监控…

Spring Cloud Gateway 突发高危漏洞,下一代云原生网关恰逢其时?

简介&#xff1a;Log4j2 的漏洞刚告一段落&#xff0c;Spring 官方在 2022 年 3 月 1 日发布了 Spring Cloud Gateway 的两个 CVE 漏洞&#xff1a;分别为 CVE-2022-22946&#xff08;严重性&#xff1a;Medium&#xff09;与 CVE-2022-22947&#xff08;代码注入漏洞&#xff…

es6 箭头函数 rest参数 扩展运算符

Es6 箭头函数 语法&#xff1a; 普通函数&#xff1a; fnfunction(){}箭头函数&#xff1a; fn()>{}特性&#xff1a; this是静态的&#xff0c;this始终指向函数声明时所在作用域下的this的值&#xff08;使用call&#xff0c;bind改变指向无效&#xff09;不能作为构造实…

云小蜜 Dubbo3.0 实践:从微服务迁移上云到流量治理

简介&#xff1a;阿里云-达摩院-云小蜜对话机器人产品基于深度机器学习技术、自然语言理解技术和对话管理技术&#xff0c;为企业提供多引擎、多渠道、多模态的对话机器人服务。17 年云小蜜对话机器人在公共云开始公测&#xff0c;同期在混合云场景也不断拓展。为了同时保证公共…

解析并执行 shell 命令

‍‍作者 | 闪客来源 | 低并发编程新建一个非常简单的 info.txt 文件。name:flash age:28 language:java在命令行输入一条十分简单的命令。[rootlinux0.11] cat info.txt | wc -l 3这条命令的意思是读取刚刚的 info.txt 文件&#xff0c;输出它的行数。 在上一回中&#xff0c;…

与容器服务 ACK 发行版的深度对话第二弹:如何借助 hybridnet 构建混合云统一网络平面

简介&#xff1a;本次采访我将继续为大家详细讲解我的好伙伴&#xff1a;阿里巴巴的开源 Kubernetes 容器网络解决方案 hybridnet&#xff0c;以及我是如何借助它来构建混合云统一网络平面。 作者&#xff1a;若禾、昱晟、瑜佳 记者&#xff1a;各位阿里巴巴云原生的读者朋友…

EventBridge消息路由|高效构建消息路由能力

简介&#xff1a;企业数字化转型过程中&#xff0c;天然会遇到消息路由&#xff0c;异地多活&#xff0c;协议适配&#xff0c;消息备份等场景。本篇主要通过 EventBridge 消息路由的应用场景和应用实验介绍&#xff0c;帮助大家了解如何通过 EventBridge 的消息路由高效构建消…

哪吒汽车选择BlackBerry QNX为中国新能源轿跑——哪吒S保驾护航

BlackBerry与合众新能源汽车有限公司近日宣布达成合作&#xff0c;合众汽车旗下汽车品牌——中国造车新势力哪吒汽车&#xff0c;在其即将量产的运动型智享轿跑——哪吒S中搭载了BlackBerry QNX为其保驾护航&#xff0c;旨在确保关键系统的功能安全、网络安全与可靠性的同时&am…

异步请求积压可视化|如何 1 分钟内快速定位函数计算积压问题

简介&#xff1a;本文分为三个部分&#xff1a;概述中引入了积压问题&#xff0c;并介绍了函数计算异步调用基本链路&#xff1b;并在指标介绍部分详细介绍了指标查看方式&#xff0c;分类解读了不同的指标含义&#xff1b;最后以一个常见的异步请求积压场景为例&#xff0c;介…

并发-分布式锁质量保障总结

简介&#xff1a;并发问题是电商系统最常见的问题之一&#xff0c;例如库存超卖、抽奖多发、券多发放、积分多发少发等场景&#xff1b;之所以会出现上述问题&#xff0c;是因为存在多机器多请求同时对同一个共享资源进行修改&#xff0c;如果不加以限制&#xff0c;将导致数据…

以网强算,中国移动算网建设激发澎湃能量

近日&#xff0c;在首届中国算力大会上&#xff0c;中国工程院院士张宏科发表演讲认为&#xff0c;“信息网络已经成为大国博弈的核心与关键&#xff0c;面临机遇期&#xff0c;我们亟需新型网络体系与技术创新&#xff0c;满足自主可控和建设网络强国的重大战略需求&#xff0…

对象方法(包含es6)

1.Object.assign(target,source1,source2,...) 方法主要用于对象的合并&#xff0c;将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性&#xff0c;不拷贝继承的属性。&#xff08;从后向前覆盖&#xff09; Object.assign方法实行的是浅拷贝…

云上的移动性能测试平台

简介&#xff1a;功能决定现在&#xff0c;性能决定未来。欢迎大家围观《云上的移动性能测试平台》&#xff0c; 了解EMAS性能测试平台的能力与规划。 1. 功能决定现在&#xff0c;性能决定未来 性能测试在移动测试领域一直是一个大难题&#xff0c;它最直观的表现是用户在前…

Docker 镜像和容器的导入导出及常用命令

作者 | 微枫Micromaple来源 | CSDN博客Docker 镜像和容器的导入导出1.1 镜像的导入导出1.1.1 镜像的保存通过镜像ID保存方式一&#xff1a;docker save image_id > image-save.tar例如&#xff1a;rootUbuntu:/usr/local/docker/nginx# docker imagesREPOSITORY TAG …

阿里云「低代码音视频工厂」正式上线,为企业用户打造音视频应用开发最短路径

简介&#xff1a;vPaaS全新定义企业级音视频应用开发 1月5日&#xff0c;阿里云视频云“低代码音视频工厂vPaaS“正式上线&#xff0c;极大程度降低音视频开发门槛&#xff0c;打破传统音视频技术壁垒&#xff0c;全新定义企业级的音视频应用开发。 低代码音视频工厂基于云原生…

数组方法 包含es6

有回调函数的方法都有两个参数&#xff08;不写默认是window) 例&#xff1a;map&#xff0c;forEach&#xff0c;find let arr[1,2,3,4]; let obj{a:1,b:2}; let _thisnull; arr.map(v>{_thisthisreturn v1 },obj) console.log(_this) 数组方法细则 方法功能参数返回值是…

阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)

简介&#xff1a;EPL背后的技术框架是如何设计的&#xff1f;开发者可以怎么使用EPL&#xff1f;EPL未来有哪些规划&#xff1f;今天一起来深入了解。 作者 | 王林、飒洋 来源 | 阿里技术公众号 一 导读 最近阿里云机器学习PAI平台和达摩院智能计算实验室一起发布“低碳版”巨…

如何从 Docker 镜像里提取 dockerfile!

作者 | A-刘晨阳来源 | CSDN博客今天给大家分享一下 dockerfile 里面是如何写的&#xff0c;然后去查了查就有了新的发现——通过镜像来提取 dockerfile。从镜像中提取dockerfile的两种方法。history参数我们可以直接用docker自带的参数来查看镜像的dockerfile&#xff0c;但有…

新品发布|备案变更不用再担心中断服务啦

简介&#xff1a;ICP备案迁移服务&#xff0c;就是面向有计划变更域名备案主体&#xff0c;或者在不同主体间迁移网站备案信息的客户&#xff0c;实现迁移过程中域名或者网站服务不中断的备案增值服务。 说起ICP备案&#xff0c;做过互联网经营业务的朋友都很熟悉&#xff0c;…

一眼定位问题,函数计算发布日志关键词秒检索功能

简介&#xff1a;当 FaaS 应用出现很多报错&#xff0c;且调用日志页面的请求过多时&#xff0c;如何才能简单、快速地查到出现 bug 的原因&#xff1f; 听说这个问题你也遇到了&#xff1f; 小王是一名程序员&#xff0c;最近在使用 FaaS &#xff08…