Vue常见面试题

yaochaohang
2024-12-06 / 0 评论 / 1 阅读 / 正在检测是否收录...

vue-router导航守卫有哪些?

  • 全局前置钩子:beforeEach、beforeResolve、afterEach
  • 路由独享守卫:beforeEnter
  • 组件内的守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

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

Object.defineProperty只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。Vue2是通过递归+遍历data对象来实现对数据的监控的。如果属性值也是对象那么就需要深度遍历,显然如果能劫持一个完整的对象才是更好的选择。

Proxy可以劫持整个对象,并返回一个新的对象。Proxy不仅可以代理对象,还可以代理数组。还可以代理动态增加的属性。

V-for为什么要加key?

如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/服用相同类型元素的算法。key是Vue中vnode的唯一标记,通过这个key,可以让diff操作可以更准确、更快速。

如何从真实DOM到虚拟DOM?

涉及到Vue中的模板编译原理,主要过程:

  • 将模板转换成ast树,ast用对象来描述真实的JS语法(将真实DOM转换成虚拟DOM)
  • 优化树
  • 将ast树生成代码

为什么Vue采用异步渲染?

Vue是组件级更新,如果不采用异步更新,那么每次更新数据都会对当前组件进行重新渲染,所以为了性能,Vue会在本轮数据更新后,在异步更新视图。核心思想nextTick。

为什么Vue组件中的data必须是一个函数?

对象为引用类型,当复用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data也会被修改。而使用返回对象的函数,由于每次返回的都是一个新对象,引用地址不同,则不会出现这个问题。

MVC和MVVM的区别?

MVC

mvc全名是Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范

  • Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图):是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
  • Controller(控制器):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据,

mvc的思想:一句话描述就是Controller负责将Model的数据用View显示出来,换句话就是在Controller里面把Model的数据赋值给View。

MVVM

mvvm新增了vm类

  • ViewModel层:做了两件事达到了数据的双向绑定,将模型转化成视图,即将后端传递额数据转化成所看到的页面。实现的方式是:数据绑定。将视图转化成模型,即将所看到的页面转化成后端的数据。实现的方式是:DOM事件监听。

mvvm与mvc的最大区别就是:它实现了View和Model的自动同步,也就是当Model的属性改变时,我们不用再自己手动操作DOM元素,来改变View的显示,而是改变属性后该属性对应View层显示会自动改变。

Vue data中某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?

不会立即同步执行重新渲染。Vue实现响应式并不是数据发生变化后DOM立即变化,而是按一定的策略进行DOM的更新。Vue在更新DOM时是异步执行的。只要侦听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。

Vue的优点

  • 轻量级框架,只关注视图层,是一个构建数据的视图集合
  • 简单易学
  • 双向数据绑定
  • 组件化
  • 视图、数据、结构分离,使数据的更改更为简单
  • 虚拟DOM
  • 运行速度更快

nextTick是什么?

Vue实现响应式并不是在数据发生变化后立即更新DOM,使用nextTick是在下次DOM更新循环结束之后立即执行延迟回调。在修改数据之后使用则可以在回调中获取更新后的DOM。

Vue的生命周期

  • beforeCreate:实例初始化之后,数据观测之前调用
  • created:实例创建完成之后调用
  • beforeMount:挂载之前调用
  • mounted:挂载完成调用
  • beforeUpdate:数据更新之前调用
  • updated:数据更新之后调用
  • beforeDestroy:实例销毁之前调用
  • destroyed:实例销毁之后调用

v-if和v-show的共同点和不同点?

共同点:都能控制元素的显示和隐藏。

不同点:v-if是动态的向DOM树内添加或者删除DOM元素,v-show是通过display:none来控制元素的显示和隐藏。

如何让CSS只在当前组件中起作用?

在组件中的style标签中加上scoped

<keep-alive></keep-alive>的作用是什么?

keep-alive是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

Vue中常用的指令和它的用法

  • v-model 双向数据绑定
  • v-for 循环
  • v-if v-show 显示与隐藏
  • v-on 绑定事件
  • v-once 只绑定一次

vue-loader是什么? 使用它的用途有哪些?

vue文件的一个解析器,将template、js、style转换成js模块。

用途:js可以写生es6,style样式可以scss或less,template可以加jade等。

v-model的使用

v-model用于表单数据的双向绑定,其实它就是一个语法糖,背后做了两个操作:v-bind绑定一个value属性,v-on指令给当前元素绑定input事件。

分别简述computed和watch的使用场景

computed:当一个属性受多个属性影响的时候就需要用到computed。

watch:当一条数据影响多条数据的时候就需要用watch。

v-on可以监听多个方法吗?

可以,用{}对象的写法。

渐进式框架的理解

主张最少,可以根据不同的需求选择不同的层级。

v-if和v-for的优先级

v-if和v-for一起使用时,v-for比v-if的优先级更高,这意味着v-if将分别重复运行于每个v-for循环中,所以不推荐v-if和v-for同时使用。

Vue常用修饰符

  • .stop 等同于JavaScript中的event.stopPropagation(),防止事件冒泡
  • .prevent 等同于JavaScript中的event.preventDefault(),防止执行预设的行为(标签的默认行为)
  • .capture 与事件冒泡的方向相反,事件捕获由外到内
  • .self 只会触发自己范围内的事件,不包含子元素
  • .once 指挥触发一次

Vue的两个核心点

数据驱动,组件系统

数据驱动:ViewModel,保证数据和视图的一致性。

组件系统:应用类UI可以看作全部是由组件书构成的。

SPA首屏加载慢如何解决?

安装动态懒加载所需插件,使用动态懒加载。使用CDN资源。

axios的特点有哪些?

  • 支持Promise API
  • 可以拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动换成json

封装Vue组件的过程?

  1. 建立组件的模板,先把架子搭起来,写写样式,考虑好组件的基本逻辑。
  2. 准备好组件的数据输入。即分析好逻辑,定好props里面的数据,类型。
  3. 准备好组件的数据输出。即根据组件逻辑,做好要暴漏出来的方法。

params和query的区别

query在浏览器中显示参数,params不显示参数。query刷新页面之后不会丢失数据。params刷新页面会丢失数据。

Vue初始化页面闪动的问题

在Vue初始化之前,由于div是不归Vue管的,所有在代码还没有解析的情况下会容易出现花屏现象。

解决方案:在css里加上 [v-cloak] { display:none },如果没有彻底解决问题,则在根元素加上加上 style="display:none"

Vue更新数组是触发视图更新的方法

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

什么是Vue生命周期? 有什么作用?

每个Vue实例在被创建时都要经过一系列的初始化过程,例如:需要设置数据监听、编译模板、将实例挂载到DOM并在数据变化时更新DOM等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这个用户在不同阶段添加自己代码的机会,方便用户做一些逻辑处理。

$route和$router的区别

$router是VueRouter的实例,在script标签中想要导航到不同的URL,使用$router.push方法等。

$route为当前router跳转对象,里面可以获取到当前路由的各种参数信息。

VueX有哪几种属性?

有5中,分别是state、getter、mutation、action、module

  • state:基本数据,数据源存放地
  • getters:从基本数据派生出来的数据
  • mutations:提交更改数据的方法,同步更新
  • action:像一个装饰器,包裹mutations,实现数据的异步更新
  • modules:模块化VueX
0

评论 (0)

取消