面试题之Vue2

95 阅读2分钟

Vue2的生命周期钩子有哪些?请求数据放在哪个钩子里最合适?

Vue2的生命周期钩子按照before和已完成为一对,共有4对:

  1. create
  2. mount
  3. update
  4. destroy

除此之外还有activatied,deactivate,errorCaptured三个钩子。

数据请求一般放在mounted里。因为created钩子会有ssr(server side render)问题,updated钩子的触发又过于频繁。

Vue2组件间通信方式有哪些?

  1. 父子组件
  • a.父=>子:用props
  • b.子=>父:事件(如$emit click事件)
  1. 爷孙组件
  • a.使用两次父子间通信
  • b.使用provide和inject,也就是依赖注入
  1. 任意组件:eventBus,事件多了就会很乱,难以维护。
  2. 任意组件:Vuex。

怎么理解Vuex?

  1. 是什么?状态管理模式和库。
  2. 核心概念
  • a. store是一个大容器
  • b. state用来读取状态,有一个mapStates函数
  • c. getter用来读取派生状态,有一个mapGetters函数
  • d. mutation用来同步提交状态变更,有一个mapMutations函数
  • e. action用来异步变更状态,但它提交的是mutation
  • f. module用来划分store的模块,方便维护代码
  1. 为什么要区分mutation和action?为了方便维护。但Pinia就把这两个概念合并了。

怎么理解VueRouter?

  1. 是什么?官方路由,适用于单页面应用
  2. 核心概念
  • a. router-linkrouter-view
  • b. 前端路由懒加载:import()有括号的就是懒加载
  • c. 嵌套路由
  • d. hash模式和history模式
  • e. 路由守卫:每一个路由在进入/离开时都可以设置一个钩子,在钩子中可以设置相应的操作
  1. hash模式和history模式的区别:
  • a. hash模式用的是url里面的#,history模式用的是html5提供的history API
  • b. 只有history模式需要后端nginx配合(把所有请求都重定向到index)
  • c. hash模式seo不友好

Vue2是如何实现双向数据绑定的?

  1. 一般通过v-model.sync实现,v-modelv-bind:valuev-on:input语法糖
  • a. v-bind:value实现了数据 => UI的绑定。
  • b. v-on:input实现了UI => 数据的绑定。 两个单向绑定合起来就是双向数据绑定了。
  1. 这两个单向绑定是如何实现的?
  • a. 前者通过Object.defineProperty的API给data的每个属性递归地创建getter和setter,用于监听data的改变,data一改变就安排UI改变。
  • b. 后者通过template compiler给dom添加事件监听,dom input的值改变了就回去修改data。