composition API

本文详细介绍了Vue 3中的Composition API,包括setup函数的使用、reactive、ref、readonly的原理及应用,以及computed、watchEffect和watch的详细操作。还探讨了生命周期钩子、provide和inject的实践,并通过计数器、修改title和本地缓存案例展示了Composition API的实际运用。此外,文章提到了jsx在Vue 3中的角色。

一、composition API的基本使用

在这里插入图片描述

1、setup函数的基本使用

注意:setup()函数中不能使用this
注意:setup()比created()执行的早

(1)、setup函数的参数

在这里插入图片描述
在这里插入图片描述

注意:props属性依然需要写,因为需要定义传过来的值得类型等

在这里插入图片描述

(2)、setup()函数的返回值

在这里插入图片描述

在这里插入图片描述

注意:如果setup()和data中都定义了counter,那么使用的是setup()中的counter

(3)、 setup中定义方法(methods)

在这里插入图片描述

在以前的data中定义的数据是响应式的,那是因为data中返回的数据vue内部都是用reactive函数进行了处理

2、reactive API

可以使数据变成响应式

注意:reactive()函数中必须传入一个对象或者数组

在这里插入图片描述

在这里插入图片描述

3、ref API

在这里插入图片描述

在这里插入图片描述

ref 自动解包

在这里插入图片描述

在这里插入图片描述

注意:ref的返回值是一个对象 数据在value属性中。
ref()也可以传入对象

4、readonly API

readonly的原理就是proxy的set方法会被劫持

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上边的三个案例都会报错 因为readonly()包裹的数据是不允许修改的
注意:readonly接受一个对象 (响应式或纯对象) 或 ref 并返回原始对象的只读代理

二、其他的API

1、isProxy isReactive isReadonly toRaw shallowReactive shallowReadonly

在这里插入图片描述

在这里插入图片描述

2、toRefs

toRefs函数包裹的必须是一个reactive对象

在这里插入图片描述
在这里插入图片描述

3、toRef

在这里插入图片描述

在这里插入图片描述

注意:toref和toRefs都必须传reactive对象 普通对象不可以
想要对reactive对象做解构的时候才会用到这两个API

4、unref isRef shallowRef triggerRef

在这里插入图片描述

5、使用customRef实现对双向绑定的数据进行节流

在这里插入图片描述
在这里插入图片描述

三、computed

注意:computed的返回值是一个ref对象

在这里插入图片描述

1、computed的基本使用

传入一个函数:get函数
在这里插入图片描述
传入一个对象:get和set
在这里插入图片描述

四、watchEffect

在这里插入图片描述

注意:watchEffect拿不到原来的值 但是watch可以

1、watchEffect的基本使用

watchEffect会自动收集需要侦听的依赖

注意:watchEffect一开始就会执行一次,
如果watchEffect()里边传入的函数中没有使用age,那么就不会收集age的依赖 意思就是age单独发生改变时并不会触发这个事件

在这里插入图片描述

在这里插入图片描述

2、watchEffect的停止侦听

在这里插入图片描述

在这里插入图片描述

3、watchEffect清除副作用

在onInvalidate函数中需要传入一个函数,在传入的这个函数中清除额外的副作用

在这里插入图片描述

4.在setup中使用ref

在这里插入图片描述

5、watchEffect的执行时机

在这里插入图片描述
在这里插入图片描述

五、watch

1、watch的基本使用

watch的三个参数,第一个是侦听源,第二个是回调函数,第三个是配置

在这里插入图片描述

注意:watch的第一个参数可以是ref对象 可以是reactive对象 可以是函数 可以是数组

第一个参数传get()函数:

在这里插入图片描述

第一个参数传reactive对象

在这里插入图片描述
如果不想让newvalue 和 oldvalue的值是reactive对象 而是普通的对象 那么应该这样写:
在这里插入图片描述

注意:如果第一个参数是reactive对象的话 默认是深度侦听的

如果reactive包裹的是一个数组的话

在这里插入图片描述

第一个参数传ref对象

const changename = ()=>info.name="james";

2、watch侦听多个数据源

在这里插入图片描述

侦听多个数据源的做法就是第一个参数传进去一个数组

在这里插入图片描述

在这里插入图片描述

这个案例的newvalue的值和oldvalue的值就成了数组形式

也可以这样写:在这里插入图片描述

3、watch的选项

深度侦听

注意:如果第一个参数是reactive对象的话 默认是深度侦听的

如果不是reactive对象还想深度侦听的话 需要这样:
在这里插入图片描述

首次执行

在这里插入图片描述
imdedite:true的话oldvalue的是是undfind,因为这个时候没有旧的值

六、生命周期钩子

注意:生命周期可以注册多个

在这里插入图片描述

七、provide和inject

provide()有两个参数 第一个是传过去的key,第二个是传过去的值
inject()可以有两个参数 第一个是传过来的key,如果传来的没有值 第二个参数可以设置默认值

在这里插入图片描述

建议:传过去的值一般都用readonly()包裹 这样的话子孙组件就没办法修改这个值了

八、练习

1、计数器案例

在这里插入图片描述

2、修改title

在这里插入图片描述

3、本地缓存LocalStorage

在这里插入图片描述

九、jsx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Composition API 是 Vue 3 中引入的一种新的 API 风格,用于替代 Options API。它允许开发者通过函数的形式来组织和复用逻辑代码,提供更好的代码组织方式和逻辑复用能力。 以下是 Composition API 的一些核心特性及其实现方式: 1. **setup 函数**: `setup` 是 Composition API 的入口函数,在组件创建之前执行。所有的 Composition API 都需要在 `setup` 中使用。 2. **响应式数据**: 使用 `ref` 和 `reactive` 来创建响应式数据。 ```vue <template> <div> <p>Count: {{ count }}</p> <button @click="increment">Increment</button> </div> </template> <script> import { ref } from &#39;vue&#39;; export default { setup() { const count = ref(0); const increment = () => { count.value++; }; return { count, increment }; } }; </script> ``` 3. **生命周期钩子**: 在 Composition API 中,生命周期钩子以 `onXXX` 的形式存在,例如 `onMounted`, `onUnmounted` 等。 ```vue <script> import { onMounted, onUnmounted } from &#39;vue&#39;; export default { setup() { onMounted(() => { console.log(&#39;Component is mounted&#39;); }); onUnmounted(() => { console.log(&#39;Component is unmounted&#39;); }); return {}; } }; </script> ``` 4. **依赖注入**: 使用 `provide` 和 `inject` 进行跨层级组件通信。 ```vue <!-- ParentComponent.vue --> <script> import { provide, ref } from &#39;vue&#39;; export default { setup() { const message = ref(&#39;Hello from parent&#39;); provide(&#39;message&#39;, message); return {}; } }; </script> <!-- ChildComponent.vue --> <script> import { inject } from &#39;vue&#39;; export default { setup() { const message = inject(&#39;message&#39;); return { message }; } }; </script> ``` ### 解释 - **为什么引入 Composition API?** Options API 虽然简单易用,但在处理复杂逻辑时,代码会变得难以维护。Composition API 提供了一种更灵活的方式来组织代码,使得逻辑可以被提取到可复用的函数中,从而提高代码的可读性和复用性。 - **ref 和 reactive 的区别是什么?** `ref` 用于创建基本类型的响应式数据,而 `reactive` 用于创建对象类型的响应式数据。`ref` 在模板中可以直接使用,但需要通过 `.value` 访问其值;`reactive` 则不需要 `.value`,直接解构即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值