vue3.x学习笔记之项目实战 — defineProps 和 defineEmits

  • • defineProps 和 defineEmits

      • • 概述

      • • 子组件

      • • 父组件

defineProps 和 defineEmits

注意:defineProps 和 defineEmits 都是只在 <script setup> 中才能使用的编译器宏

js 为了声明 props 和 emits 选项且具备完整的类型推断,可以使用 defineProps 和 defineEmits API,它们在 <script setup> 中都是自动可用的:

defineProps 和 defineEmits 都是只在 <script setup> 中才能使用的编译器宏。

他们不需要导入,且会在处理 <script setup> 的时候被编译处理掉。defineProps 接收与 props 选项相同的值,defineEmits 也接收 emits 选项相同的值。

defineProps 和 defineEmits 在选项传入后,会提供恰当的类型推断。传入到 defineProps 和 defineEmits 的选项会从 setup 中提升到模块的范围。

因此,传入的选项不能引用在 setup 范围中声明的局部变量。这样做会引起编译错误。但是,它可以引用导入的绑定,因为它们也在模块范围内。

概述

defineProps 和 defineEmits 是 Vue 3 中的两个新特性,用于在组件中定义 props 和 emits。

defineProps 可以让开发者在组件中定义 props,这样就可以在组件内使用类型检查、默认值等属性。

与 Vue 2 不同的是,在 Vue 3 中,props 不再需要在组件实例中声明,而是通过 defineProps 方法进行定义。这样做可以使代码更加简洁明了,同时也提高了代码的可读性。

例如,下面是一个使用 defineProps 定义 props 的示例:

import { defineComponent, defineProps } from 'vue'

const Props = defineProps({
  msg: {
    type: String,
    required: true
  },
  count: {
    type: Number,
    default: 0
  }
})

export default defineComponent({
  props: Props,
  setup(props) {
    // ...
  }
})

defineEmits 则是用于定义组件中的事件。与 Vue 2 相比,Vue 3 中的 emits 不再需要在组件实例中声明,而是通过 defineEmits 方法进行定义。这样做可以使代码更加简洁明了,同时也提高了代码的可读性。

例如,下面是一个使用 defineEmits 定义事件的示例:

import { defineComponent, defineEmits } from 'vue'

const Emits = defineEmits(['update:modelValue'])

export default defineComponent({
  emits: Emits,
  setup(props, context) {
    const handleClick = () => {
      context.emit('update:modelValue', 'new value')
    }

    return {
      handleClick
    }
  }
})

以上就是 defineProps 和 defineEmits 的简单介绍。通过使用这两个方法,可以更加方便地定义组件的 props 和 emits。

子组件

<template>
    <p>{{props.msg}}</p>
    <button @click="handleClick">点击我调用父组件方法</button>
</template>
<script setup lang="ts">
    const props = defineProps({
         msg:{
            typeString,
            default: () => '默认值'
         }
    })
    const  emit = defineEmits(['on-change''update'])
    const handleClick = () =>{
        emit('on-change''父组件方法被调用了')
    }
</script>

父组件

<script setup lang="ts">
    import TestPropsPmit from './components/test-props-emit/index.vue';
    import { ref } from 'vue';
    // 定义字符串变量
    const msg = ref('欢迎使用vite!')
    // 调用事件
    const handleChange = (params:string) =>{
        console.log(params);
    }
</script>
<template></template>
    <TestPropsPmit :msg="msg" @on-change="handleChange"></TestPropsPmit>
</template>
  • • https://blog.csdn.net/qq_44285092/article/details/122752393


原文始发于微信公众号(前端爱好者):vue3.x学习笔记之项目实战 — defineProps 和 defineEmits

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/267187.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!