# Vue3

# 新特性

# 新增三个组件

  1. Fragment。支持多个根节点

  2. Suspense。可以在组件渲染之前的等待时间显示指定内容

  3. Teleport。可以让子组件能够在视觉上跳出父组件

# 新增指令v-memo

可以缓存 html 模板,比如 v-for 列表不会变化的就缓存,简单说就是用内存换时间

# 支持树摇

# Composition API

可以更好的逻辑复用和代码组织,同一功能的代码不至于像以前一样太分散,虽然Vue2中可以用minxin来实现复用代码,但也存在问题,比如方法或属性名会冲突,代码来源也不清楚等。

# Proxy代替Object.defineProperty

# 重构虚拟DOM

在编译时会将事件缓存、将slot编译为lazy函数、保存静态节点直接复用(静态提升)、以及添加静态标记、Diff算法使用最长递增子序列优化了对比流程,使得虚拟DOM生成速度大大提升。

# 支持在style标签中使用v-bind,给css绑定js变量

# 用setup代替beforeCreate和created这两个生命周期

# 新增了两个开发环境的钩子函数

  1. onRenderTracked。在组件更新时,会跟踪组件里所有变量和方法的变化。

  2. onRenderTriggered。在每次触发渲染时,会返回发生变化的新旧值,可以让我们进行有针对性调试。

# 不支持IE11

# 对TS的支持度更好

# watch和watchEffect的区别

# watch

需要明确监听哪个属性;触发时会返回新值和老值;也就是说第一次不会执行,只有变化时才会重新执行。

// 直接侦听ref
const count = ref(0)
watch(count, (count, prevCount) => {
  /* ... */
})

// 响应式对象
const boy = reactive({ age:18 })
watch(()=>boy.age, (newValue, oldValue)=>{ ... })

// 监听多个
watch( [name, ()=>boy.age], (newValue, oldValue)=>{ ... } )

# watchEffect

传入一个立即执行函数,默认第一次也会执行一次;不需要传入监听内容,会自动收集函数内的数据源作为依赖,在依赖变化的时候又会重新执行该函数,如果没有依赖就不会执。

Last Updated: 4/6/2022, 3:11:44 PM