vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3的definePros和defineEmits使用

Vue3的definePros和defineEmits使用及说明

作者:whale  fall

Vue3中的defineProps和defineEmits是组合式API的一部分,用于定义组件的props和事件,defineProps简化了props的定义和类型安全,而defineEmits则用于声明和触发组件的自定义事件,确保事件名称的类型安全

在 Vue 3 中,definePropsdefineEmits 是组合式 API 中用于定义组件的 props事件 的方法,提供了一种更简洁和明确的方式来管理组件的输入和输出。

它们属于 Composition API 的一部分,在 Vue 2 中通常使用 props$emit 来实现。

1.defineProps

defineProps 用来定义组件的 props,即组件从父组件接收的属性。它使得在 <script setup> 中使用 props 变得更加简单和类型安全。

基本用法

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

// 定义 props
const props = defineProps({
  msg: {
    type: String,
    required: true
  },
  count: {
    type: Number,
    default: 0
  }
});
</script>

<template>
  <div>
    <p>{{ props.msg }}</p>
    <p>{{ props.count }}</p>
  </div>
</template>

解释

类型推导

如果使用 TypeScript,可以通过类型推导让 props 更加明确和安全:

<script setup lang="ts">
import { defineProps } from 'vue';

interface Props {
  msg: string;
  count: number;
}

const props = defineProps<Props>();
</script>

2.defineEmits

defineEmits 用于定义组件触发的 自定义事件。它让你在 <script setup> 中声明组件发出的事件,并确保事件名称的类型安全。

基本用法

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

// 定义事件
const emit = defineEmits<{
  (event: 'update', newValue: string): void;
}>();

// 触发事件
const changeValue = () => {
  emit('update', 'new value');
};
</script>

<template>
  <button @click="changeValue">Change Value</button>
</template>

解释

多事件支持

你也可以定义多个事件:

<script setup>
const emit = defineEmits<{
  (event: 'update', newValue: string): void;
  (event: 'delete', id: number): void;
}>();
</script>

3.组合使用

你可以在一个组件中同时使用 definePropsdefineEmits,以便管理组件的输入和输出。

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

// 定义 props
const props = defineProps({
  title: String
});

// 定义事件
const emit = defineEmits<{
  (event: 'updateTitle', newTitle: string): void;
}>();

// 触发事件
const updateTitle = () => {
  emit('updateTitle', 'New Title');
};
</script>

<template>
  <h1>{{ props.title }}</h1>
  <button @click="updateTitle">Update Title</button>
</template>

总结

这两个方法大大简化了组件的编写,使得代码更加简洁、可维护,并且提供了更强的类型安全。如果你用 TypeScript,它们能帮助你避免很多常见的错误。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文