在 Vue 3 中,defineProps 和 defineEmits 是组合式 API 的核心功能,用于处理父子组件之间的传值和事件通信。

1. defineProps

defineProps 用于定义并接收父组件传递过来的数据(props)。它是在子组件中使用的,接收的数据可以是各种类型。

// 子组件
<template>
  <div>
    <h1>title:{{ title }}</h1>
    <p>count:{{ count }}</p>
  </div>
</template>

<script setup>
import { defineProps } from 'vue'

// 接收父组件传递的 props
const props = defineProps({
  title: String,
  count: Number
})
</script>
// 父组件
<template>
  <Child title="Hello, World!" :count="10" />
</template>

<script setup>
import Child from './Child.vue';
</script>

2. defineEmits

defineEmits 用于定义并触发子组件向父组件发送的事件。父组件可以通过监听这些事件来执行相应的操作。

<!-- 父组件 -->
<template>
  <Child @update="handleUpdate" />
</template>

<script setup>
import Child from './Child.vue';

// 处理子组件传来的事件
const handleUpdate = (value) => {
  console.log('Updated value from child:', value);
};
</script>
<!-- 子组件 -->
<template>
  <button @click="sendUpdate">Click to Update</button>
</template>

<script setup>
import { defineEmits } from 'vue';

// 定义事件
const emit = defineEmits(['update']);

const sendUpdate = () => {
  emit('update', 'new value'); // 触发 update 事件并传递参数
};
</script>

3. 使用 TypeScript 定义类型

在 Vue 3 中结合 TypeScript 时,defineProps 和 defineEmits 可以使用更严格的类型检查,提升代码的健壮性。

// 子组件
<script setup lang="ts">
import { defineProps, defineEmits } from 'vue';

// 定义 props 的类型
const props = defineProps<{
  title: string;
  count: number;
}>();

// 定义 emit 的事件和类型
const emit = defineEmits<{
  (event: 'update', newTitle: string): void;
}>();

const updateTitle = () => {
  emit('update', 'New Title with TS'); // 触发事件并传递参数
};
</script>
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐