Vue3的部分Composition API的简单使用

1,090 阅读2分钟

组合API

组合式API和选项式API

组合式API是vue3中提供的新的写代码的方式

vue2的选项式API(option Api)和vue3的组合式API(composition api)的大概差别

image.png
vue2中的写法

image.png
vue3来实现

image.png

小结

Vue2选项式API
优点:简单,各司其职 缺点:不方便功能复用,功能代码分散维护代码横跳
Vue3组合式API
优点:功能代码组合维护

组合API

1 setup函数

作用

1.setup是一个新的组件选项,作为组件中使用组合API的起点
2.setup中不能使用this,this指向undefined
3.只会在组件初始化的时候使用一次
4.在生命周期钩子函数之前执行

image.png

参数

setup (props,context) {
  ...
  // props:为一个对象,内部包含了父组件传递过来的所有prop数据
  // context:context对象包含了attrs,slots,emit属性
}

返回值

返回值是一个对象,在模板中需要使用的数据和函数,需要在这个对象中声明 如果在data()中也定义了同名数据,则以setup()中为准

2 生命周期

vue2中的8个

{
  beforeCreate(){ console.log('beforeCreate')},  
  created(){ console.log('created')},
  beforeMount(){ console.log('beforeMount')},
  mounted(){ console.log('mounted')},
  beforeUpdate(){ console.log('beforeUpdate')},
  updated(){ console.log('updated')},
  beforeDestroy(){ console.log('beforeDestroy')},
  destroyed(){ console.log('destroyed')}
}

vue3中的7个

setup (props,context) {
  console.log('创建实例前',props,context);
  onBeforeMount(()=>{
    console.log('挂载DOM前')
  })
  onMounted(()=>{
    console.log('挂载DOM后');
  })
  onBeforeUpdate(()=>{
    console.log('更新组件前');
  })
  onUpdate(()=>{
    console.log('更新组件后');
  })
  onBeforeUnmount(()=>{
    console.log('卸载销毁前');
  })
  onUnmounted(()=>{
    console.log('卸载销毁后');
  })
}

不建议vue2和vue3混合使用

3 ref函数

作用

定义响应式数据

步骤

1.从vue框架中导入
2.在setup函数中调用并传入数据
3.在setup函数中把ref函数调用完毕的返回值以对象的形式返回出去

image.png

4 ref属性

vue3步骤

1.导入
2.使用ref函数传入null创建ref对象
3.setup导出
4.模板中通过定义ref属性等于1创建的ref对象名称建立关联

<template>
  <div class="container">
    <div ref="dom">我是box</div>
    <button @click="hClick">hello</button>
  </div>
</template>
<script>
import { ref } from 'vue'
export default {
  name: 'App',
  setup () {
    // 1. 获取单个元素
    const dom = ref(null)
    function hClick () {
      console.log(dom.value)
    }
    return {dom, hClick}
  }
}
</script>

image.png

5 reactive函数

作用

将复杂数据定义成为响应式数据

步骤

1.导入 2.调用 3.导出

image.png

6 toRefs函数

作用

定义转换响应式中所有属性为响应式数据,通常用于解构展开reactive定义对象,简化在模板中的使用

格式

// 响应式数据:{ 属性1, 属性2 }
let { 属性1, 属性2 } = toRefs(响应式数据)

演示

image.png

image.png

image.png

7 ref和reactive

定义响应式数据的两个方式

  • ref函数(可以处理简单数据,也可以处理复杂数据),常用于将简单数据类型定义为响应式数据,在代码中修改或者获取值时,需要补上.value 在模板中可以省略
  • reactive函数,常用于将复杂数据类型定义为响应式数据
  • 推荐用法
    • 优先使用ref
    • 如果明确知道对象中有什么属性,就使用reactive,例如:表单数据