vue高频面试题
来源:B站程序员来了
第一部分:vue基础
1,v-if和v-for的优先级谁更高?同时出现该如何优化性能?
在同级出现的时候,render函数会将v-for和v-if同时渲染在一个名为_l的函数,在该函数的return中有个条件判断,这个条件判断就是v-if,而函数_l就是v-for生成的函数循环,也就是说同时出现v-for优先于v-if。
同时出现的时候,先条件判断,再进行渲染。就是在外层嵌套一个template。此时生成 的源码就是一个三元运算符,先判断条件,条件成立再执行_l函数,否知执行一个_e空函数,表示不渲染。
2,data类型
data分为两个类型:对象和函数
在源码中,当数据进行初始化的时候,首先使用typeof判断data是不是一个函数,如果是,调用getdata挂载到vue实例上,所以组件复用就是这个道理,复用一次调用detdata一次,如果不是函数,执行其本身,对象执行结束就被回收了。
3,key的作用
使用v-for的时候,不使用key,它会将每个标签元素逐一渲染到页面上,使用key之后,由于key使用的diff算法,就是先创建虚拟dom再循环这个虚拟dom,循环好之后在将渲染好的虚拟dom插入到页面上。
key的取值也有讲究,如果数据是不变的,使用index就可以了,如果数据可能会变化,key需要绑定成这个数据唯一标识,这样才能保证重新渲染的时候,使得数据一一对应。
4,vue组件化
从vue组件化的定义,优点,使用场景和注意事项说
定义:
首先会渲染成
最后被vue-loader渲染成一个render函数
5,谈谈你对vue框架设计原理的理解
从两个方面讲:渐进式、易用、灵活和高效
渐进式:vue只是提供一个核心的模块用于满足基本的开发需求,只需要引入vue文件和label文件即可,在需要其他功能的时候,通过npm下载即可,例如路由、vuex等
易用、灵活和高效:vue可以使用很多第三方组件,开发更加简单和高效,同时通过和组件化编程,让vue变得更加灵活。
vue是一个渐进式的JavaScript框架,它只提供开发需要的最基本功能,这个功能就可以满足一般的开发,如果不足以满足开发,可以通过npm下载其他功能,例如路由、vuex等。而且vue有很多的第三方组件,这样开发起来更加高效,通过组件化编程让vue开发变得简单而且灵活。
6,谈谈你对vvm,vpm,mvvm的理解
7,vue组件之间的通信
vue组件之间的通信包括:父子之间的通信,子父之间的通信,兄弟之间的通信,后代组件之间的通信。
父子之间的通信:
props
$on
this.$parent
子父之间的通信
$emit
refs获取
v-model
插槽(严格意义上说,是父子之间的通信,只是在父页面中将子组件内的数据显示到父组件的插槽内,而父组件不可直接使用该数据)
兄弟之间通信
pubsub(发布订阅者模式)
后代组件之间通信:
pubsub(发布订阅者模式)
全部搞定的方式:vuex
但是这个方式主要使用在公共资源上,例如获取用户名密码token,多个页面同时调用同一个接口,购物车的数据共享等可以使用,大型项目为了解耦可以使用,小型项目可以少使用。
8,vue项目优化
i,路由懒加载
ii.keep-alive
iii.使用v-show复用DOM
Ⅳ.避免v-for和v-if同时使用
Ⅴ.无改变的列表数据,请求的时候使用Object.freeze()冻结该数据,有变化的长数据使用分页滚动的方式显示部分数据。
Ⅶ.事件销毁和图片懒加载
Ⅷ.第三方插件按需引入
9,watch和computed的局别、联系和使用场景
10,vue的生命周期
11.nextTick的原理了使用场景
nextTick接收一个回调函数,该回调函数会在DOM加载完毕之后执行。
new Vue({
methods: {
example: function () {
this.message = 'changed'
this.$nextTick(function () {
this.doSomethingElse()
})
}
}
})
注意:回调函数不能使用箭头函数,否则可能导致this不指向vue实例对象。
nextTick的原理:
nextTick使用了html提供的api——mutationObserver构造函数,该函数会在DOM加载完成之后调用:
var ob=new MutationObserver(function(){
console.log("dom加载完毕")
})
var dom=document.getElementById('app')
ob.observer(dom)
12,vue双向绑定原理,vue如何实现响应式(vue2)
vue如何实现响应式:之前写的,就不在这写了
JavaScript手写v-model,v-model原理实现
第二部分:路由
vue高频面试题的更多相关文章
- vue高频面试题(面试路上踩过的坑)
### Vue 双向绑定原理 mvvm 双向绑定,采用**数据劫持结合发布者-订阅者模式**的方式,通过 `Object.defineProperty()` 来劫持各个属性的 setter.gette ...
- Vue 前端面试题
Vue 前端面试题 1. 说一下 Vue 的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合“发布者 - 订阅者”模式的方式,通过 Object.defineProperty() ...
- vue前端面试题知识点整理
vue前端面试题知识点整理 1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫 ...
- vue.js面试题整理
Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...
- Vue 前端面试题[转]
https://mp.weixin.qq.com/s/Uxhx2dJ1Xbm6N3Gl7wNZNw Vue 前端面试题 游荡de蝌蚪 前端开发 1周前 作者:游荡de蝌蚪 https://segmen ...
- 备战“金九银十”10道String高频面试题解析
前言 String 是我们实际开发中使用频率非常高的类,Java 可以通过 String 类来创建和操作字符串,使用频率越高的类,我们就越容易忽视它,因为见的多所以熟悉,因为熟悉所以认为它很简单,其实 ...
- 整理Vue.js 面试题
Vue.js 面试题整理 Vue项目结构介绍 build 文件夹:用于存放 webpack 相关配置和脚本. config 文件夹:主要存放配置文件,比如配置开发环境的端口号.开启热加载或开启gz ...
- Vue.js面试题整理(转载)
一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑:View 代表UI ...
- [ 转载 ] vue.js面试题一
转载自:https://www.cnblogs.com/aimeeblogs/p/9501490.html 如有侵权 联系删除 Vue.js面试题整理 一.什么是MVVM? MVVM是Model-Vi ...
- Spring经典高频面试题,原来是长这个样子
Spring经典高频面试题,原来是长这个样子 2019年08月23日 15:01:32 博文视点 阅读数 719 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...
随机推荐
- WPF实现轮播图
1.效果图 2.前端代码 <Window x:Class="LiveChartDemo.View.CarouselView" xmlns="http://schem ...
- Python保姆级教程 数据类型—新手小白入门必看系列
推荐使用压缩软件和杀毒软件 7 - zip 使用火绒 一.基本数据类型与变量(上) 2.1 注释 优点: 代码说明 没注释的代码 有注释的代码 不让解释器执行注释的那句话 2.2 单行注释 单行注释快 ...
- 8.4考试总结(NOIP模拟30)[毛一琛·毛二琛·毛三琛]
最有名的莫过于想死一次吗. 前言 至今都不知道题目是个啥... T1 毛一琛 解题思路 \(\mathcal{Meet\;In\;The\;Middle}\) 其实就是一个爆搜... 把整个区间分为两 ...
- 再谈中断机制(APIC)
中断是硬件和软件交互的一种机制,可以说整个操作系统,整个架构都是由中断来驱动的.一个中断的起末会经历设备,中断控制器,CPU 三个阶段:设备产生中断信号,中断控制器翻译信号,CPU 来实际处理信号. ...
- kettle从入门到精通 第三十五课 kettle 变量
1.设置变量 a.可以通过转换中的"设置变量"步骤进行设置. b.手动通过kettle.properties文件或通过"编辑"菜单中的"设置环境变量& ...
- kettle从入门到精通 第二十九课 job 循环 检验字段的值
1.平常我们在用kettle设计job的时候,会用到循环来处理一些业务逻辑,比如循环检测某个表中的数据条数等.这个时候就会用到一个特别重要的步骤:检验字段的值. 下图是一个的通过初始化DNOE变量为f ...
- .net6 .net core web api json 遇到 400 错误
环境: .net6 webapi 服务端模型声明 public class TongYiMinPgPayReq { public string mch_no { get; set; } public ...
- mysql GROUP_CONCAT使用
完整的语法如下: 1 group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 1 2 3 4 5 ...
- IDEA环境编译Spring源码
一.下载源码 1.官网下载 官网地址 如下图 2.github git下载 github地址 如下图 3.gitee git下载(国内推荐使用) gitee地址 如图 查看对应的gradle版本 在下 ...
- 安装并使用 openssl 生成证书
1. 安装 openssl参考链接: OpenSSL加密算法库使用系列教程_openssl算法哭调用-CSDN博客 安装包下载地址: 安装包下载地址(正常情况需要将 openssl 源码下载后, 自己 ...