Vue3中 defineProps 与 defineEmits 基本使用

defineProps

基本概念

        在Vue 3中,defineProps是一个函数,用于定义一个组件的props。它接收一个props对象作为参数,并且会返回一个响应式的props对象。简单来说在vue3中,在进行父组件向子组件的通信,我们可以使用defineProps实现。


基本使用

         在vue3中在setup语法糖中使用defineProps时,我们不需要引用。在父组件中使用子组件的同时,进行数据通信 ,在子组件中使用definePorps进行接收使用,值得注意的是接收的数据是只读的即不可更改。

父组件

<script setup>
import Son from './components/Son.vue'
const num = 666
</script>

<template>
  <div class="father">
    <h1>父组件</h1>
    <!-- 传数据 -->
    <Son message="父组件的信息" :num="num" />
  </div>
</template>

子组件

<script setup>
// 接收传过来的数据
// defineProps(['message', 'num'])

//接收并保存
const myProps = defineProps(['message', 'num'])
</script>

<template>
  <div class="son">
    <h2>我是子组件</h2>
    <!-- 使用父组件的数据 -->
    <p>接收的数据:{{ myProps.message }} -- {{ myProps.num }}</p>
  </div>
</template>

 效果显示

 类型限制

         在defineProps中我们可以对传来的的数据进行限制,在ts中我们也可以使用范型和接口进行限制。

<script setup>
defineProps({
//对数据进行类型限定 
  message: String,
  num: Number,
})
</script>

<template>
  <div class="son">
    <h2>我是子组件</h2>
    <!-- 使用父组件的数据 -->
    <p>接收的数据:{{ message }} -- {{ num }}</p>
  </div>
</template>

一旦我们传的数据不符合类型限制,vue就会报警告


defineEmits

基本概念

        Vue 3中的defineEmits是一个新的函数,用于定义组件的自定义事件。在Vue 2中,我们可以使用$emit来触发组件的自定义事件,但是在Vue 3中,$emit被移除了。相反,我们可以使用defineEmits来定义组件的自定义事件。


基本使用

父组件

<script setup>
import { ref } from 'vue'
import Son from './components/Son.vue'
const sonData = ref()

// 定义接收组件的函数
const getSonData = (data) => {
  sonData.value = data
}
</script>

<template>
  <div class="father">
    <h1>父组件</h1>
    <p>接收的子组件的数据:{{ sonData }}</p>
    <!-- 在父组件中,给子组件绑定自定义事件 -->
    <Son @getData="getSonData" />
  </div>
</template>

子组件

<script setup>
import { ref } from 'vue'
const sonData = ref('子组件的数据')

// 在子组件中调用defineEmits并定义要发射给父组件的方法
// 使用defineEmits会返回一个方法,使用随意变量去接收
const emits = defineEmits(['getData'])

const sentData = () => {
  // 调用emits并传入发射给父组件的方法以及参数
  emits('getData', sonData.value)
}
</script>

<template>
  <div class="son">
    <h2>我是子组件</h2>
    <button @click="sentData">传送数据</button>
  </div>
</template>

效果显示

要在WebStorm正确识别Vue 3的withDefaults、definePropsdefineEmits,您需要进行以下配置步骤: 1. 确保您的WebStorm版本是最新的,以便获得对Vue 3的最新支持。 2. 在您的Vue 3项目,确保已安装了Vue 3的相关依赖。您可以通过运行以下命令来安装最新版本的Vue 3: ```bash npm install vue@next ``` 3. 确保您的WebStorm正确配置了Vue.js的语言支持。您可以按照以下步骤进行配置: - 打开WebStorm的设置(Preferences)。 - 在左侧导航栏选择 "Languages & Frameworks"。 - 选择 "JavaScript",然后在右侧的 "JavaScript language version" 下拉菜单选择 "ECMAScript 6" 或更高版本。 - 在左侧导航栏选择 "Vue.js"。 - 在右侧的 "Version" 下拉菜单选择 "Vue 3.x"。 4. 如果您仍然无法识别withDefaults、definePropsdefineEmits,请尝试手动添加类型声明文件。创建一个名为 `shims-vue.d.ts` 的文件,并将以下内容添加到文件: ```typescript declare module 'vue' { export function withDefaults<T>(component: T): T; export function defineProps<T extends Record<string, unknown>>(props: T): T; export function defineEmits<T extends Record<string, (...args: any[]) => any>>(emits: T): T; } ``` 5. 确保您的WebStorm已重新加载项目,然后尝试使用withDefaults、definePropsdefineEmits时,应该能够正确识别它们的类型。 通过以上配置,您应该能够在WebStorm正确识别Vue 3的withDefaults、definePropsdefineEmits。如果仍然遇到问题,请确保您的项目正确配置并且已安装了正确的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值