Vue3--------组合式API

一、什么是组合式API?

组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语,涵盖了以下方面的 API:

1>响应式 API:例如 ref() 和 reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。

2>生命周期钩子:例如 onMounted() 和 onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。

3>依赖注入:例如 provide() 和 inject(),使我们可以在使用响应式 API 时,利用 Vue 的依赖注入系统。

优点:更好的逻辑复用,更灵活的代码组织

二、组合式API-setup

1.什么是setup()

setup()函数是在组件使用组合式API的入口。

  • 可以在选项式API(data、watch..)的组件中使用组合式API,也可以单独使用组合式API
  • 通过return一个对象。暴露模版需要使用的响应式属性、计算数据性、方法等
  • 在setup()方法中是不能获取this实例的,那也就意味着,setup中不能够访问选项式API暴露的属性,但选项式API中可以访问setup中暴露的属性。

2.在setup()中使用所有选项式API的选项

1>响应式数据

在setup()函数中创建响应式数据需要使用ref或者reactive方法。

通过reactive创建对象类型的响应式数据 

 

限制:         

        1. reactive只能创建对象类型数据(对象、数组、map...)       

          2. reactive创建的响应式对象不能经历“被替换”(将响应式对象的属            性赋值或解构至本地变量时,或是将该属性传入一个函数时) 

 

  通过 ref 创建任意数据类型的响应式数据:

(1) ref创建的响应式数据是一个包裹value属性的对象,所以在setup函数使用需要:变量.value。     

 (2) ref创建的响应式数据暴露到模板中时,不需要通过value属性获取。 

2> props

setup()函数接收一个参数,即为props!,但是这里需要通过传统方式先接收props,然后可以传递给setup函数。

3> setup()第二个参数:setup上下文对象(阉割版的vue实例)

setup()函数接收第二个参数context,setup的上下文对象。他包含:attrs, emit,slots, expose四大属性。attrs相当于之前的this.$attrs, emit相当于之前的    this.$emit。

4> computed()

通过computed()方法可以定制计算属性。

5> 关于监听:watch()、watchEffect()
  • watchEffect()自动监听所有属性。     
  • watchEffect()方法自动监听所有属性,只要有属性发生改变,就会触发            
  • watchEffect();
  • 注意:必须要在watchEffect当中使用到具体变化的属性,否则watchEffect不执行。

watch监听属性。

语法:watch(ref值回调函数,(newValue,oldValue)=>{})

普通ref值:监听ref值不需要count.value,直接监听ref值count。

对象ref值:

监听整个对象的变化:(如果监听整个对象的变化,他的新值和旧值一样,因为对象类型数据是通过指针储存的。) 

监听某个属性的变化:

小总结:

  watchEffect()       

  •  - 默认执行一次。         
  • - 监听所有属性改变,但是必须要在watchEffect当中使用到当前具体  ,才能触发watchEffect。     
  •  - 只能得到改变之后的最新值

watch()         

  • - 第一次不执行。       
  •  - 指定要监听的属性。       
  •  - 可以得到属性的新值和旧值    
6>路由对象和路由信息的处理

因为setup()方法中不能使用this,所以需要使用其他方式处理路由对象和路由信息: useRoute和useRouter方法必须在setup函数中执行,不能再他的嵌套函数中执行!

路由信息

  1. 设定路由规则中允许使用props传递参数。
  2.  使用useRoute方法创建路由信息对象。

路由对象

        使用useRouter方法创建路由对象。

7> 生命周期

setup()方法本身就相当于之前声明周期中的created之前生命周期的总和,也就是说setup替代了created和beforeCreated。

其他常用的生命周期函数:

onMounted()、onUpdated()、onUnmounted()

3.setup语法糖

1> 响应式数据

语法糖模式下不需要写暴露语法,默认暴露。

2>使用子组件

在语法糖模式下,组件导入后不需要注册可以直接使用。

3>props和emits

可以通过defineProps() 和 defineEmits()方法使用props和emit。

defineProps()

defineEmits()

defineEmits返回的是一个事件触发器(相当于$emit),可以使用他的返回值触    发他接收到的自定义事件:

 

4>useAttrs()

使用useAttrs()方法可以在setup中获取未接收的attrs属性。

OK,本文到此结束,希望本文对你有所帮助 😃

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

### 组合式 API 的设计、实现与用法 #### 设计理念 组合式 API 的设计理念是为了提供更灵活和模块化的方式来编写 Vue 组件。相比于选项式 API,它允许开发者通过函数的形式组织代码逻辑,从而更好地支持逻辑复用和复杂业务场景下的代码管理[^4]。 #### 实现细节 组合式 API 主要由以下几个部分组成: 1. **响应式 API** - `ref()` 和 `reactive()` 是核心方法,用于创建响应式的变量或对象。`ref()` 适用于基本数据类型,而 `reactive()` 更适合处理嵌套的对象结构。 ```javascript import { ref, reactive } from 'vue'; const count = ref(0); // 创建一个可变的数值 const state = reactive({ name: 'Vue', version: 3 }); // 创建一个可变的对象 ``` 2. **生命周期钩子** 生命周期钩子在组合式 API 中以函数形式存在,例如 `onMounted()` 和 `onUnmounted()`,它们可以直接在 `setup()` 函数中调用,以便于集中管理和复用逻辑[^1]。 ```javascript import { onMounted, onUnmounted } from 'vue'; export default { setup() { onMounted(() => { console.log('Component is mounted'); }); onUnmounted(() => { console.log('Component is unmounted'); }); } }; ``` 3. **依赖注入** 使用 `provide()` 和 `inject()` 可以轻松实现跨组件的状态共享,这在大型项目中尤为重要。 ```javascript // 父组件 import { provide, ref } from 'vue'; export default { setup() { const message = ref('Hello from parent!'); provide('message', message); } }; // 子组件 import { inject } from 'vue'; export default { setup() { const message = inject('message'); return { message }; } }; ``` #### 使用场景 组合式 API 特别适合以下几种情况: - 当需要在一个组件中复用多个独立的功能模块时,可以通过定义组合函数来封装这些逻辑[^3]。 - 对于复杂的业务逻辑,可以将其拆分为若干个小单元,分别维护并测试,最后再组装到一起[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值