这里写自定义目录标题
一、组合式API - 父子通信
1. 父传子
基本思想
- 父组件中给子组件绑定属性
- 子组件内部通过props选项接收数据
2. 子传父
基本思想
- 父组件中给子组件标签通过@绑定事件
- 子组件内部通过 emit 方法触发事件
二、 组合式API - 模版引用
概念:通过 ref标识 获取真实的 dom对象或者组件实例对象
1. 基本使用
实现步骤:
- 调用ref函数生成一个ref对象
- 通过ref标识绑定ref对象到标签
2. defineExpose
默认情况下在
三、组合式API - provide和inject
1. 作用和场景
顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信
2. 跨层传递普通数据
实现步骤
- 顶层组件通过
provide
函数提供数据- 底层组件通过
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 等新特性,使得我们可以更好地组织和管理我们的代码。