Skip to content

Vue

  1. MVC 与MVVM 设计模式
  2. 选项式API 的编程风格和优势
  3. 声明式渲染及响应式数据实现原理
  4. 指令系统与事件方法及传参处理
  5. 计算属性和侦听器区别与原理
  6. 条件渲染与列表渲染及注意点
  7. class 样式与style 样式的3种形态
  8. 表单处理和双向数据绑定原理
  9. 生命周期钩子函数与原理分析

1、MVC 与MVVM 设计模式

2、声明式编程和命令式编程

声明式编程:不需要编写具体是如何实现得,直接调用声明就可以实现功能。SQL 语句就是声明式语言。

命令式编程:需要编写具体是如何实现的,调用命令。

1、生命周期

Vue2Vue3描述
beforeCreate-实例创建前
created-实例创建后
beforeMountonBeforeMountDOM 挂载前调用
mountedonMountedDOM 挂载完成调用
beforeUpdateonBeforeUpdate数据更新之前调用
updatedonUpdated数据更新后调用
beforeDestroyonBeforeUnmount组件销毁前调用
destrotedonUnmounted组件销毁完成调用

流程图

2、语法

  • 插值表达式

  • 指令

    • v-text
    • v-html
    • v-on 支持修饰符,简写@
    • v-bind 简写为:
  • computed 和 watch

    • computed 是计算属性,用于多个值影响一个值的情况。
    • watch 是侦听器,用于对一个值影响多个值的情况。
    • computed 具备缓存的能力,是只读的。
    • watch 在页面首次加载时不执行,需要设置立即监听才会执行。设置深度监听才会监听多层级属性变化。
    • watch 支持异步。
  • classstyle 绑定

    1. 字符串
    2. 数组
    3. 对象
  • 条件渲染(v-if)、列表渲染(v-for

    1. v-showv-if 的区别

      • v-show 通过控制 DOM 元素的 display 属性,而v-if 则是 DOM 元素是否创建。
      • 频繁切换状态的地方使用v-show 较好。
    2. v-ifv-for 的优先级

      • Vue2 中v-for 的优先级更高,同时使用的话会先循环、再判断,导致无论是否需要展示某元素,都会先遍历整个数组。
      • Vue3 中v-if 的优先级会更高,同时使用的话会报错。因为v-if 先执行的时候还没有拿到这个数组。
  • 表单输入绑定

    • v-model

3、概念

  • 组件

  • 插槽

  • 插件

  • mixin

  • 深入响应式原理

  • 不同构建版本的 Vue

4、Vue2 和 Vue3 的区别

  • 写法上:

    • Vue2 采用 options Api,Vue3 则是 composition Api

    options Apimethodsdata等都是分散的。而 composition Api中根据逻辑功能来组织,我们可以将一个功能所定义的methodsdata等会放在一起。

    • Vue2 中响应式数据放在 data 函数里,Vue3 使用refreactive 将数据声明为响应式。
  • 响应式原理:

    • Vue2 是通过Object.defineProperty 对数据进行劫持实现。而 Vue3 是通过使用Proxy 对数据代理实现的。
  • 生命周期:

    • Vue3 将beforeCreatecreated 合并到了setup 函数里。
  • 根节点:

    • Vue2 只允许有一个根节点,Vue3 不做要求。
  • 内置组件

    • Vue3 新增了传送组件Teleport 和异步依赖处理组件Supense

5、组件通信

方式Vue2Vue3
父传子propsprops
子传父$emitemits
父传子$attrattrs
子传父$listeners-(合并到 attr)
祖先传子孙provide/injectprovide/inject
子组件访问父组件$parent-
父组件访问子组件$children-
访问组件$refref
跨组件EventBusmitt

6、插槽

7、自定义指令

8、nextTick

  • Vue 官方解释:

    在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

  • 理解:

    Vue 修改data 并不会立即触发 DOM 更新,而是把需要更新的watcher 加入到队列中,然后在合适的时机在nextTick中调用这些watcher 的更新函数进行 DOM 更新。所以在data 刚被修改的时候,用户是获取不到更新后的 DOM 的,这时候便需要调用nextTick 函数获取更新后的 DOM。

9、Vue 原理

当一个 Vue 实例被创建时,Vue 会遍历data 中的属性,用Object.defineProperty(Vue3 采用 Proxy)将它们转为getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。

每个组件实例都有相应的Watcher,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter 被调用时,会通知Watcher 重新计算,从而导致使它关联的组件的已更新。

Vue 双向绑定数据原理

采用数据劫持 结合发布-订阅模式,通过Object.defineProperty 来劫持各个属性的getter/setter,在数组变动时发布消息给订阅者,触发相应的监听回调。

  1. 对需要observe 的数据对象递归遍历,包括子对象的属性,都加上getter/setter

  2. compile 解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并给每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一但数据变更,收到通知,更新视图。

  3. Watcher 订阅者是ObserverCompile 之间的桥梁。它主要做:

  • 在自身实例化时往属性订阅器(Dep)中添加自己

  • 自身有一个update 方法

  • 属性变更时,Dep.notice 通知并调自身的update,触发Compile中绑定的回调

mixin

插件

不同构建版本的 Vue

更新于: