前端vue面试篇(精简白话文版本)

89 阅读5分钟

interview(vue篇)

37fd89c4fc57c14c1a38405715ff59d6.jpeg

MVVM模型

MVVM本质是MVM的模型升级版,其中model表示数据模型,view表示看到的页面,ViewModel是逻辑层,表示view和model之间的一个桥梁,数据会绑定到viewmodel,层中更新数据,视图变化也会通知viewmodel层更新数据,一个双向绑定的过程,以前是通过DOM来更新视图,现在是通过数据更新视图。

vue 的生命周期

-每个组件实例在创建后都会经历一系列的初始化过程,每个过程运行的周期,可以叫生命周期钩子函数,

  • vue2的生命周期有八个阶段,

  • 分别为创建前后(beforeCreate/created),

  • 挂载前后(beforeMount/mounted),

  • 更新前后(beforeUpdate/updated),

  • 销毁前后(beforeDestroy/beforeUnmout),

  • 以及一些特殊场景的周期函数,

  • 组件缓存激活停用(activted/deactivated)

  • 捕获孙子组件错误时调用(errorCaptured) vue3中引入了新的API创建前后(beforeCreate/created)钩子函数注册在setup()进行调用,其他对应的周期函数在原有的语法前加on,- beforeCreate 和 created 没有对应的onXxx()函数,取而代之使用setup()函数

  • berforeMount —> onBeforeMount

  • mounted —> onMounted

  • beforeUpdate —> onBeforeUpdate

  • updated —> onUpdated

  • beforeUnmount —> onBeforeUnmount

Vue.$nextTick是什么

nextTick是vue提供的一个全局的API,由于vue的异步策略,导致数据修改后不会直接体现在DOM上,nextTick就是等DOM循环机结束后,会在队里中加一个回调函数,确保该函数在数据更新后

vue的基本原理

当一个vue实例创建时,vue会遍历data中的属性,vue2使用object.defineProperty(vue3使用proxy对对象进行代理)将他们转换为getter/setter并且在内部追踪相关依赖,在属性被访问和修改的时候通知变化,,每个组件实例都有相应的watcher程序实例,在组件渲染的过程中把属性记录为依赖,从而使广联的组件得以更新。

vue响应式的原理

  • (1)什么是数据劫持 使用object.defineProperty劫持对象的访问器,在属性发生变化时我们可以获取变化,从而进行相关的操作
  • (2) 发布者模式/订阅者模式 发布者和订阅者互不知道对方的存在,发布者只需要把消息发送到订阅器里面,订阅者只需要接受自己需要订阅的内容即可
  • (3)响应式的原理 vue的响应式原理就是数据劫持开发者-订阅者模式,通过object.definPerPoerty来劫持各个属性的setter和getter,在数据变动时发布消息给订阅者触发相应监听回调

MVVM/MVC/MVP的区别

  • (1) MVC,model数据模型,view视图模型,controller控制器 view负责页面的现实逻辑,model负责业务数据,controller负责处理整合view和model之间的纽带,当model发生变化,用户交互时,con中的触发器开始工作进行视图更新
  • (2)MVVM model,view viewModel model表示数据模型,view负责页面UI视图,viewModel负责监听model中数据的改变并且控制视图的更新,处理用户的交互操作。

vue的指令以及操作

  • v-on 给用户绑定函数,缩写为@,点击事件写在methods里面
  • v-bind 动态绑定作用,缩写:(冒号)及时对页面的数据进行更改
  • v-solt 缩写#,组件插槽
  • v-for 循环根据数组个数,循环数组元素同时生成标签
  • v-show/v-if,显示内容、显示与隐藏,show操作css的dispaly(页面频繁操作使用),if操作DOM的销毁和生成
  • v-else 必须和v-if连用,不能单独使用,会报错
  • v-text 解析文本
  • v-html解析HTML标签

为什么避免v-for和v-if一起使用

v-for比v-if具有更高的优先级,虽然用起来也不会做错,但是性能却不高,若果有5个v-for,那么v-if也会分别执行5次

v-for循环绑定key

可以提升渲染能力,vue在渲染的时候,会将新的DOM和旧的DOM进行对比。如果dom结果一致会使用旧的DOM,可能会造成数据渲染异常,加一个唯一的key会给DOM加上一个标识符,让vue强制更新DOM

为什么不建议使用index索引作为key

使用index作为key基本没什么效果,因为不管是数组的顺序怎么颠倒,index都是0,1,2这样的顺序,会导致vue复用错误的旧子节点,做很多额外的工作

v-model和.sync对比

  • (1)相同点都是语法糖,都可以实现父子组件的数据双向通信
  • (2)不通点,v-model只能绑定一个v-model,针对的更多的是操作,value结果,是一种chanage的操作 .sync可以同时绑定对个prop,对各种状态是相互传递是status,是update(更新)的操作

计算属性computed和watch区别是什么

  • (1)computed支持缓存,依赖的数据发生变化,才会重新计算,不支持异步
  • (2)watch侦听器,不支持缓存,数据发生变化就会触发相应的操作,支持一步监听,有两个参数,一个新的值,一个变化之前的值

vue3 的API盘点

  • (1)全局的API-全局用到的api

image.png

  • (2)组合式API-拥有的组合式api

image.png

  • (3)选项式API-拥有的选项api

image.png

image.png

  • (4)内置API-指令,组件,特殊元素,特殊属性

image.png

image.png

  • (5)单文件组件--语法定义

image.png

  • (6) 进阶API-渲染函数,服务函数,TS工具类型

image.png

image.png