【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例

在这里插入图片描述

一、组合式API - 父子通信

1. 父传子

基本思想

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收数据

在这里插入图片描述

2. 子传父

基本思想

  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件

在这里插入图片描述

二、 组合式API - 模版引用

概念:通过 ref标识 获取真实的 dom对象或者组件实例对象

1. 基本使用

实现步骤:

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签

在这里插入图片描述

2. defineExpose

默认情况下在

在这里插入图片描述

三、组合式API - provide和inject

1. 作用和场景

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

在这里插入图片描述

2. 跨层传递普通数据

实现步骤

  1. 顶层组件通过 provide 函数提供数据
  2. 底层组件通过 inject 函数提供数据
    在这里插入图片描述

3. 跨层传递响应式数据

在调用provide函数时,第二个参数设置为ref对象

!在这里插入图片描述

4. 跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

在这里插入图片描述

四、Vue3.3 新特性-defineOptions

背景说明:

但是用了


为了解决这一问题,引入了 defineProps 与 defineEmits 这两个宏。但这只解决了 props 与 emits 这两个属性。

如果我们要定义组件的 name 或其他自定义的属性,还是得回到最原始的用法——再添加一个普通的

这样就会存在两个


所以在 Vue 3.3 中新引入了 defineOptions 宏。顾名思义,主要是用来定义 Options API 的选项。可以用 defineOptions 定义任意的选项, props, emits, expose, slots 除外(因为这些可以使用 defineXXX 来做到)

在这里插入图片描述

五、Vue3.3新特性-defineModel

在Vue3中,自定义组件上使用v-model, 相当于传递一个modelValue属性,同时触发 update:modelValue 事件
在这里插入图片描述

我们需要先定义 props,再定义 emits 。其中有许多重复的代码。如果需要修改此值,还需要手动调用 emit 函数。

于是乎 defineModel 诞生了。

在这里插入图片描述

生效需要配置 vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue({
      script: {
        defineModel: true
      }
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

六、总结

Vue 3 中的组合式 API 是一种新的开发风格,它将组件的逻辑功能拆分为更小的可复用的函数。在这种开发模式下,我们可以使用一组函数来定义组件的状态、计算属性、事件等,并且可以很方便地共享逻辑代码。

在组合式 API 中,父子组件之间的通信可以通过 prop 和 emit 来实现。父组件可以通过向子组件传递 prop 的方式来传递数据,子组件可以通过 emit 事件的方式将数据传递给父组件。

模板引用是 Vue 3 中一个非常方便的特性,它允许我们在模板中使用 ref 接收一个组件实例的引用,并且可以直接调用该实例中的方法和访问其属性。

provide 和 inject 是 Vue 3 中新引入的 API,它们可以用来实现全局状态的共享。provide 可以在组件中声明一个或多个值,这些值可以被该组件的所有子孙组件访问。而 inject 可以在子孙组件中声明一个或多个依赖项,它们会在祖先组件中查找并注入。

Vue 3.3 版本引入了两个新的特性:defineOptions 和 defineModel。

defineOptions 可以用来定义组件的选项,它接受一个对象作为参数,其中包含了组件的 props、methods、computed 等选项。这样我们可以在组件外部定义组件的选项,然后在组件内部进行使用。

defineModel 可以用来定义组件的 v-model 行为,它接受一个对象作为参数,其中包含了 v-model 的 prop 名称和事件名称。这样我们可以在组件外部定义组件的 v-model 行为,然后在组件内部进行使用。

总的来说,Vue 3 中的组合式 API 提供了更灵活和可复用的开发方式,通过父子通信、模板引用、provide 和 inject、defineOptions 和 defineModel 等新特性,使得我们可以更好地组织和管理我们的代码。Vue 3 中的组合式 API 是一种新的开发风格,它将组件的逻辑功能拆分为更小的可复用的函数。在这种开发模式下,我们可以使用一组函数来定义组件的状态、计算属性、事件等,并且可以很方便地共享逻辑代码。

在组合式 API 中,父子组件之间的通信可以通过 prop 和 emit 来实现。父组件可以通过向子组件传递 prop 的方式来传递数据,子组件可以通过 emit 事件的方式将数据传递给父组件。

模板引用是 Vue 3 中一个非常方便的特性,它允许我们在模板中使用 ref 接收一个组件实例的引用,并且可以直接调用该实例中的方法和访问其属性。

provide 和 inject 是 Vue 3 中新引入的 API,它们可以用来实现全局状态的共享。provide 可以在组件中声明一个或多个值,这些值可以被该组件的所有子孙组件访问。而 inject 可以在子孙组件中声明一个或多个依赖项,它们会在祖先组件中查找并注入。

Vue 3.3 版本引入了两个新的特性:defineOptions 和 defineModel。

defineOptions 可以用来定义组件的选项,它接受一个对象作为参数,其中包含了组件的 props、methods、computed 等选项。这样我们可以在组件外部定义组件的选项,然后在组件内部进行使用。

defineModel 可以用来定义组件的 v-model 行为,它接受一个对象作为参数,其中包含了 v-model 的 prop 名称和事件名称。这样我们可以在组件外部定义组件的 v-model 行为,然后在组件内部进行使用。

总的来说,Vue 3 中的组合式 API 提供了更灵活和可复用的开发方式,通过父子通信、模板引用、provide 和 inject、defineOptions 和 defineModel 等新特性,使得我们可以更好地组织和管理我们的代码。

猜你喜欢

转载自blog.csdn.net/shenchengyv/article/details/135375644
今日推荐