Vue面试题01
说出vue常用的指令:
v-text, v-html, v-bind, v-for, v-if, v-else, v-else-if, v-show, v-on,
谈谈你对MVC的理解:
MVC是软件开发中常见的开发模式,主要应用于后端,将程序划分为M模型、V视图、C控制器从而便于团队协作开发,减少代码冗余
谈你对MVVM理解:
Model层代表数据模型、
View层代表UI组件、ViewModel是Model、View层的桥梁,数据会绑定到ViewModel并监控模型数据变化自动更新同步到页面,视图变化会通知ViewModel层更新数据。
谈谈MVVM和MVC区别:
相同点:都是软件开发常见的开发模式或者开发思想
不同点:
1- MVC后端居多,MVVM前端
2- MVC单向通信 目的将M和V代码分离,MVVM则是双向通信,不需要手动操作DOM
说一下v-show、v-if的区别:
都可以控制元素隐藏显示,v-if语法更强、控制DOM、v-show控制CSS
高频切换例如二维码、登录弹框、提示框、删除提示框、tab选项卡,推荐使用v-show 来减少DOM频繁删除创建所产生的额外性能开销
判断循环v-if、v-for优先级:
在 vue 2中,在一个元素上同时使用 v-if
和 v-for
时,v-for的优先级高于v-if 缺点:会产生不必要的性能开销
而在 vue 3 中, v-if的优先级高于v-for vue3 解决了这个问题,v-if判断为false 后,不会执行v-for
说一下v-model原理:
v-model其底层是基于【:value】和【@input】 封装的语法糖
VUE2响应式原理(中级):
Vue初始化数据时,底层会通过Object.defineProperty对data中的模型数据进行数据劫持,数据变化会通知进行更新操作。
VUE2响应式原理(高级):
底层通过Object.defineProperty进行数据劫持结合 发布订阅模式 通知视图更新。
(Vue是采用数据劫持结合发布/订阅模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。)
VUE2响应式数据无法劫持原因、和解决方案:
Object.defineProperty 不支持 复杂数据类型 劫持
对象递归 、数组重写 、额外api ($forceUpdate() 、$set)
$forceUpdate 原理:
调用 notify() 强制视图更新
$set 原理:
defineReactive(this.data数据, 要劫持得数组索引或对象键, 默认值) 建立响应式依赖 指定数据更新
VUE3响应式原理:
proxy 构造函数结合 Reflect 内置对象 拦截
-Object.defineProperty 拦截的是对象的属性,会改变原对象。 proxy 是拦截整个对象,通过 new 生成一个新对象,不会改变原对象。
- proxy 语法更强,拦截方式除了上面的 get 和 set ,还有 11 种,以前就6个
- proxy 特性更强,可以监听未定义的,针对于N层则get时判断递归添加proxy拦截即可
最新文章
- 初学者--bootstrap(五)JavaScript插件(上)----在路上(6)
- c++学习笔记01-输入输出流&;&;文件输入输出操作
- (实用篇)PHP页面跳转到另一个页面的方法总结
- windows7开启虚拟wifi和虚拟无线AP的方法
- Jstl标签库/Filter过滤器
- poj3094---对字符串的处理
- insertBefore方法(javascript与jQuery)
- [记录]Shell中的getopts和getopt用法
- BZOJ 4804
- numpy, matplotlib库学习笔记
- linux 命令基础一。
- P5280 [ZJOI2019]线段树
- 位运算------按位与、按位或、按位异或、取反、<;<;、>;>;、>;>;>;
- 使用Python完成排序(冒泡、选择、插入法)
- 修改linux 最大文件限制数 ulimit
- 基于prometheus监控k8s集群
- C++头文件的工作原理
- Lua中的注释
- bzoj1050 旅行
- 使用cmstp绕过应用程序白名单
热门文章
- 为什么不推荐Python初学者直接看项目源码
- PHP的Sodium加密扩展函数了解
- dede5.7 标题长度限制修改
- Python - 生成requirement.text 文件
- [手机编程]Aid Learning--换源+数据库安装
- requests接口自动化-列表与字典参数化
- DBeaver MSSQL 支持TLS设置
- 设计 4 个线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1 。写出程序。
- 纯净Ubuntu16安装CUDA(9.1)和cuDNN
- Java基础之(七):Scanner对象