Vue3

composition API

setup

export default {
  setup() {
    const prop = ref('')
    const fn = () => {

    }
    return { prop, fn }
  }
}
  • 语法糖

ref、reactive等

  • ref

    • 可以获取dom

      <div ref="dom">我是DOM</dov>
      
      <script setup>
        //必须跟上面的名字一样
        const dom = ref()
        console.log(dom.value)
      </script>
    • isRef、shallowRef...

    • reactive

      • shallowReactive

      • script里不需要再使用value

          <script setup lang="js">
          let obj = reactive({a: '1'})
        const handleChangeObj = () => {
          //以下非响应式
          obj = reactive({...obj, b: '2'})
          obj = {...obj, b: '2'}
          //以下响应式
          obj.b = '2'
          Object.assign(obj, {b: '2'})
        }
        </script>
    • 以上两个区别

      • ref支持所有类型,reactive引用类型(Array、Object、Map、Set、Function...)

      • ref取值或复制都需要加value,reactive不需要

      • reactive通过proxy实现,不能直接赋值,否则破坏响应式

        • 数组通过push加解构arr.push[...res]

        • reactive添加一个对象,把数组作为一个属性去解决

        • reactive是对象的话可以使用Object.assign

toRef全家桶

  • toRef

    • 只能修改响应式对象的值,非响应式视图毫无变化

  • toRefs

    • 解构响应式对象时使用

  • toRaw

computed

watch

watchEffect

key-diff解析

  • 为什么要虚拟DOM

Vue3响应式简易实现

  • Vue2 使用的是Object.defineProperty(), Vue3 Proxy

  • Object.defineProperty()只能设置提前设置好的值,新增需要$set,数组是重写额7个原型方法,修改某一项值是无法劫持

生命周期

组件

父传子defineProps

子传父

defineExpose

递归组件

动态组件

slot

  • 匿名插槽

  • 具名插槽

  • 作用域插槽(父组件获取子组件数据)

  • 动态插槽

内置组件

异步组件+Suspense

Teleport

keep-alive

transition

  • 自定义类名,可结合第三方类库,比如Animite.css

  • duration=50 or duration="{enter:50,leave:500}"

  • 8个生命周期,可结合gsap

  • appear 首次动画

transition-group过渡列表

  • 其他用法同transition

  • 多一个v-move类

  • 平移过渡

  • 状态过渡

provide/inject

兄弟组件传参

  • 通过父组件

  • EventBus

v-model

  • 在Vue3 v-model 是破坏性更新的

  • v-model在组件里面也是很重要的

  • v-model 其实是一个语法糖 通过props 和 emit组合而成的

  • 默认值的改变

    prop:value -> modelValue 事件:input -> update:modelValue v-bind 的 .sync 修饰符和组件的 model 选项已移除 新增 支持多个v-model 新增 支持自定义 修饰符 Modifiers

Directive

自定义指令

  • Vue3指令的钩子函数

    created 元素初始化的时候 beforeMount 指令绑定到元素后调用 只调用一次 mounted 元素插入父级dom调用 beforeUpdate 元素被更新之前调用 update 这个周期方法被移除 改用updated beforeUnmount 在元素被移除前调用 unmounted 指令被移除后调用 只调用一次

  • Vue2指令 bind inserted update componentUpdated unbind

  • mountedupdated 时触发相同行为,而不关心其他的钩子函数

自定义Hooks

  • 主要用来处理复用代码逻辑的一些封装

  • Vue2里面是Mixins

  • 除了生命周期,组件的data、methods、filters会覆盖mixins里的同名data、methods、filters

全局函数、变量

css Style

属性穿透

插槽选择器

全局选择器

动态css

css module

others

Last updated