当前位置: 首页 > news >正文

每天10个vue面试题(一)

1. Vue的基本原理?
  • 当一个Vue实例创建时,Vue会遍历data中的属性,用Object.defineProperty(vue3.0使用proxy )将它们转为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。
  • 每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。

2. 双向数据绑定的原理?
  • Vue通过Object.defineProperty()方法对数据进行劫持,监听数据的变化,并通过getter和setter方法对数据进行读写。
  • Vue通过发布订阅模式,维护了一个订阅者数组,当数据发生变化时,Vue会通知所有订阅者进行更新。
  • 当用户在页面上进行修改时,Vue会更新对应的数据,并更新所有订阅者更新视图,同时当数据发生变化时,Vue也会更新对应的视图,通过这样的机制,Vue实现了双向数据绑定,使得数据和视图的变化可以互相影响

3. 使用 Object.defineProperty() 来进行数据劫持有什么缺点?
  • 在对一些属性进行操作时,使用这种方法无法拦截,比如通过下标方式修改数组数据或者给对象新增属性,这都不能触发组件的重新渲染,因为 Object.defineProperty 不能拦截到这些操作。更精确的来说,对于数组而言,大部分操作都是拦截不到的,只是 Vue 内部通过重写函数的方式解决了这个问题。
  • 在 Vue3.0 中已经不使用这种方式了,而是通过使用 Proxy 对对象进行代理,从而实现数据劫持。使用Proxy 的好处是它可以完美的监听到任何方式的数据改变,唯一的缺点是兼容性的问题,因为 Proxy 是 ES6 的语法。

4. MVC原理?
  • MVC 通过分离 Model、View 和 Controller 的方式来组织代码结构。
  • View 负责页面的显示逻辑
  • Model 负责存储页面的业务数据,以及对相应数据的操作。
  • View 和 Model 应用了观察者模式,当 Model 层发生改变的时候它会通知有关 View 层更新页面。
  • Controller 层是 View 层和 Model 层的纽带,它主要负责用户与应用的响应操作,当用户与页面产生交互的时候,Controller 中的事件触发器就开始工作了,通过调用 Model 层,来完成对 Model 的修改,然后 Model 层再去通知 View 层更新。   

5. MVVM原理?
  • MVVM 分为 Model、View、ViewModel:
  • Model代表数据模型,数据和业务逻辑都在Model层中定义;
  • View代表UI视图,负责数据的展示;
  • ViewModel负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作;      
  • Model和View并无直接关联,而是通过ViewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系。因此当Model中的数据改变时会触发View层的刷新,View中由于用户交互操作而改变的数据也会在Model中同步。
  • 这种模式实现了 Model和View的数据自动同步,因此开发者只需要专注于数据的维护操作即可,而不需要自己操作DOM。

6. MVP原理?
  • MVP 模式与 MVC 唯一不同的在于 Presenter 和 Controller。
  • 在 MVC 模式中使用观察者模式,来实现当 Model 层数据发生变化的时候,通知 View 层的更新。这样 View 层和 Model 层耦合在一起,当项目逻辑变得复杂的时候,可能会造成代码的混乱,并且可能会对代码的复用性造成一些问题。
  • MVP 的模式通过使用 Presenter 来实现对 View 层和 Model 层的解耦。MVC 中的Controller 只知道 Model 的接口,因此它没有办法控制 View 层的更新,MVP 模式中,View 层的接口暴露给了 Presenter 因此可以在 Presenter 中将 Model 的变化和 View 的变化绑定在一起,以此来实现 View 和 Model 的同步更新。这样就实现了对 View 和 Model 的解耦,Presenter 还包含了其他的响应逻辑。

7. Computed 和 Watch 的区别?
  • computed 计算属性 : 依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值。 
  • watch 侦听器 : 更多的是观察的作用,无缓存性,类似于某些数据的监听回调,每当监听的数据变化时都会执行回调进行后续操作。

8. Computed 和 Methods 的区别?
  • 相同点:可以将同一函数定义为一个 method 或者一个计算属性。对于最终的结果,两种方式是相同的 
  • 不同点: computed: 计算属性是基于它们的依赖进行缓存的,只有在它的相关依赖发生改变时才会重新求值;method 调用总会执行该函数。  

9. slot是什么?有什么作用?
  • slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。插槽slot是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示是由父组件决定的。slot又分三类,默认插槽,具名插槽和作用域插槽。
  • 默认插槽:又名匿名插槽,当slot没有指定name属性值的时候一个默认显示插槽,一个组件内只有有一个匿名插槽。
  • 具名插槽:带有具体名字的插槽,也就是带有name属性的slot,一个组件可以出现多个具名插槽。
  • 作用域插槽:默认插槽、具名插槽的一个变体,可以是匿名插槽,也可以是具名插槽,该插槽的不同点是在子组件渲染作用域插槽时,可以将子组件内部的数据传递给父组件,让父组件根据子组件的传递过来的数据决定如何渲染该插槽。

10. slot原理
  • 当子组件vm实例化时,获取到父组件传入的slot标签的内容,存放在vm.$slot中
  • 默认插槽为vm.$slot.default,具名插槽为vm.$slot.xxx,xxx 为插槽名,
  • 当组件执行渲染函数时候,遇到slot标签,使用$slot中的内容进行替换,此时可以为插槽传递数据,若存在数据,则可称该插槽为作用域插槽。

          

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 全能型CAE/CFD建模工具SimLab 详解Part1: Geomtry,轻松集成力学、电磁学、疲劳优化等功能
  • MySQL 创建数据库
  • Java面试八股之MySQL中的MVCC是什么,作用是什么?
  • coco数据集格式计算mAP的python脚本
  • 【方法】如何打开设置了密码的ZIP文件?
  • 如何高效学习(二)
  • 云服务性能优化:缓存策略的高效应用
  • Vue 3 <script setup> 使用v-bind(或简写为 :)来动态绑定图片的 src 属性
  • [算法] 优先算法(四):滑动窗口(下)
  • 表格数据存本地,实时保存
  • C++基础(1)
  • 构建LangChain应用程序的示例代码:60、探索 OpenAI V1 新功能及其在 LangChain 中的应用
  • unity 手动制作天空盒及使用
  • 30 华三华为STP
  • python+django 环境搭建以及post接口封装
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • C++类的相互关联
  • docker python 配置
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js ES6 求数组的交集,并集,还有差集
  • LeetCode29.两数相除 JavaScript
  • Python3爬取英雄联盟英雄皮肤大图
  • Python学习笔记 字符串拼接
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • webpack4 一点通
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 学习HTTP相关知识笔记
  • 怎么把视频里的音乐提取出来
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #大学#套接字
  • $L^p$ 调和函数恒为零
  • %check_box% in rails :coditions={:has_many , :through}
  • (003)SlickEdit Unity的补全
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)选择元素——(17)练习(Exercises)
  • (8)STL算法之替换
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (转)关于pipe()的详细解析
  • .net core docker部署教程和细节问题
  • .NET Core中Emit的使用
  • .NetCore发布到IIS
  • .Net下的签名与混淆
  • ::前边啥也没有
  • @EnableAsync和@Async开始异步任务支持
  • @RequestMapping处理请求异常
  • @SpringBootApplication 包含的三个注解及其含义
  • @开发者,一文搞懂什么是 C# 计时器!