如何使用Vue 3和Type Script进行组件化设计

在Vue 3中,Composition API 是一种全新的逻辑复用和代码组织方式,它允许你将组件的逻辑(如响应式状态、计算属性、方法、生命周期钩子等)封装到单独的函数中,从而提高了代码的可复用性和可维护性。以下是如何在Vue 3中使用Composition API的基本步骤:

1. 引入必要的函数

首先,你需要从 vue 包中引入 defineComponent 和 Composition API 的其他函数(如 ref, reactive, computed, watch, onMounted 等)。defineComponent 是可选的,但它提供了类型推断和一些额外的运行时检查。

复制代码
import {
    defineComponent, ref, computed, onMounted } from 'vue';

2. 使用 setup 函数

setup 函数是 Composition API 的入口点。它是一个在组件创建之前被调用的同步函数,用于设置组件的响应式状态、计算属性、方法等。setup 函数会在 beforeCreate 和 created 生命周期钩子之前被调用,并且它是 this 的上下文之外的(即 this 在 setup 中不是组件实例)。

复制代码
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';

const count = ref(0);
const doubled = computed(() => count.value * 2);

onMounted(() => {
  console.log('Component is mounted!');
});

function increment() {
  count.value++;
}
</script>

注意:<script setup> 是 Vue 3 引入的语法糖,它提供了一种更简洁的方式来使用 Composition API。它会自动将 setup 函数的返回值暴露给模板,并且你不需要显式地调用 defineComponent。

3. 在模板中使用

在模板中,你可以直接访问 setup 函数中返回的任何响应式状态、计算属性或方法。

复制代码
<template>
  <div>
    <p>{
  { count }}</p>
    <p>{
  { doubled }}</p>
    <button @click="increment">Increment</button>
  </div>
</template>

4. 响应式状态

使用 ref 或 reactive 来创建响应式状态。ref 用于基本数据类型,而 reactive 用于对象或数组。

复制代码
const count = ref(0); // 使用 ref 创建响应式的基本数据类型
const person = reactive({
    name: 'Alice', age: 30 }); // 使用 reactive 创建响应式的对象

5. 生命周期钩子

Composition API 提供了与组件生命周期钩子对应的函数,如 onMounted, onUpdated, onUnmounted 等。

复制代码
onMounted(() => {
   
  // 组件挂载后执行的代码
});

onUpdated(() => {
   
  // 组件更新后执行的代码
});

onUnmounted(() => {
   
  // 组件卸载后执行的代码
});

6. 依赖注入和提供/注入

虽然 Composition API 本身不直接提供类似于 provide 和 inject 的API,但你可以通过 setup 函数的第二个参数(context)来访问 provide 和 inject。不过,更常见的做法是使用 Vue 3 提供的 provide 和 inject 函数(这些函数不是 setup 特有的,但可以在 setup 中使用)。

复制代码
// 父组件
setup() {
   
  const theme = ref('dark');
  provide('theme', theme);
  // ...
}

// 子组件
setup(props, {
    inject }) {
   
  const theme = inject('theme')!; // 注意:需要类型断言或使用可选链来处理可能的undefined
  // ...
}

// 或者使用独立的 provide 和 inject 函数
// setup() {
   
//   const theme = ref('dark');
//   provide('theme', theme);
//   // ...
// }

// setup(props, context) {
   
//   const theme = inject('theme', 'default-theme'); // 第二个参数是默认值
//   // ...
// }

请注意,上面的 inject 示例中使用了 ! 来进行非空断言,这是因为 TypeScript 无法自动推断 inject 返回值的非空性。如果你不确定注入的值是否存在,你应该使用可选链(?.)或默认值来处理它。

通过以上步骤,你可以在Vue 3中有效地使用Composition API来构建你的组件。

相关推荐
持敬chijing24 分钟前
白盒测试与代码审计-JS 数据逆向
javascript·网络·安全·web安全·网络安全·网络攻击模型·安全威胁分析
weixin_BYSJ198734 分钟前
【计算机毕设】基于Spring_Boot_Vue的马拉松报名与选手成绩追踪系统05445
java·vue.js·spring boot·学习·spring·django·课程设计
薛一半1 小时前
Redux实战:组件状态管理全解析
开发语言·前端·javascript·react.js
小羊没烦恼!14 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
星光不问赶路人14 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
Highcharts.js15 小时前
AI图表开发工具Highcharts Assist|自然语言生成图表代码
javascript·人工智能·highcharts·开发神器
志尊宝15 小时前
Vue3 零基础每日笔记(087):Vue3 高频面试题(下)
前端·javascript·vue.js·笔记·ecmascript·#vue.js
const_qiu17 小时前
第二章 2.6:初始化 NestJS 服务端 —— TypeScript 后端框架体验
前端·javascript·typescript
miofly18 小时前
GitHub 今日推荐|sweety-handdraw-video:文章转手绘口播视频
javascript·开源·github
用户831348593069818 小时前
Vue3 事件:常用用法与开发高频坑点
前端·javascript·vue.js