首页 > 其他分享 >defineProps和defineEmits

defineProps和defineEmits

时间:2024-07-14 17:27:52浏览次数:11  
标签:const name 组件 props defineEmits defineProps

defineProps

当在不同场景下,父组件控制子组件展示不同的样式,或者传递不同的数据,这个时候就需要使用到props,子组件通过props来接收父组件传递过来的数据。

场景复现:不同的页面中导航栏展示不同的颜色,这个时候就需要对导航栏组件使用props声明,如此父组件就可以完成对子组件的不同场景的不同定义。

props 声明的格式

  1. 简单声明单个值
// 当前组件声明一个name的属性
const props = defineProps(["name"])

// 父组件中使用
<DemoChild :name="fuName"></DemoChild>
const fuName = ref("zhangsan")
  1. 约定数据类型
const props = defineProps({
  name:String
})

// 父组件中使用方式和上面一致,
  1. 约定默认值
const props = defineProps({
  name:{
    type:String,
    default: 'lisi'
  }
})
  1. 声明多个Props
const props = defineProps({
  name:{
    type:String,
    default:'lisi'
  },
  address:{
    type:String,
    default:'xxx'
  }
  // ...
})
  1. 声明一个对象格式的Props
const props = defineProps({
  user:{
    type:Object,
    default:()=>({name:'lisi',address:'xxx'})
  }
})

defineEmits

defineEmits 是一个用于定义组件可以触发哪些自定义事件的函数。通过使用defineEmits可以完成子组件对父组件的传值。(上面的defineProps为父组件向子组件进行传值)

  • 子组件通过defineEmits来自定义事件,并通过emit('事件名','参数')的方式将值传递给父组件
  • 父组件通过 在子组件@自定义事件='处理函数'来获取子组件传递的值。

父组件

<template>
  <!-- 父组件自定义add事件 -->
  <xxx-child @add="handleAdd"></xxx-child>
</template>
<Script setup>
  import {ref} from 'vue'
  function handleAdd(e){
    consloe.log(e)
  }
</Script>

子组件

<template>
  <button @click="handleClick">子组件向父组件传值</button>
</template>
<Script setup>
  import {ref} from 'vue'
  // 子组件声明
  const emit = defineEmits(['add'])
  function handleClick(){
    emit('add',20)
  }
</Script>

标签:const,name,组件,props,defineEmits,defineProps
From: https://blog.csdn.net/m0_63622279/article/details/140419484

相关文章

  • vue3 defineEmits 使用
    概论defineEmits用来定义子组件暴漏给父组件的自定义事件测试代码子组件<template><divclass="box">child</div></template><scriptlang="ts"setup>interfaceEmit{(e:"emitfn1",data:Array<number>):void;......
  • vue3的defineProps接收类型注解
    //这是没有用ts语法接收的props参数defineProps({color:String,size:{type:String,required:false,default:'middle'},})//TS语法//格式:withDefaults(defineProps<类型>(),{默认值名:默认值})第一种写法:withDefa......
  • vue3在构建时,使用魔法糖语法时defineProps和defineEmits的注意事项
    在Vue3.2+版本中,可以使用<scriptsetup>替代传统的script标签来编写组件,它提供了更简洁的语法来编写CompositionAPI代码。在<scriptsetup>中,使用defineProps和defineEmits时需要注意:如果显式地导入defineProps时,在编译时会提示以下wanning<scriptsteup>impo......
  • 前端学习-vue视频学习009-defineProps(子组件接收父组件的数据)
    尚硅谷视频链接defineProps-只接收父:要有数据letpersonList=reactive<personArr>([{id:'qqq1',name:'aaa',age:10,gender:'F'},{id:'qqq2',name:'vvv',age:30,gender:'F'},{id:'qq......
  • 为什么defineProps宏函数不需要从vue中import导入?
    前言我们每天写vue代码时都在用defineProps,但是你有没有思考过下面这些问题。为什么defineProps不需要import导入?为什么不能在非setup顶层使用defineProps?defineProps是如何将声明的props自动暴露给模板?举几个例子我们来看几个例子,分别对应上面的几个问题。先来看一个正常的......
  • vue3 defineEmits的使用
    1.计数器案例父组件:<template><h2>当前计数为:{{counter}}</h2><HelloWorld@add1="add1"@decre1="decre1"></HelloWorld></template><scriptsetup>import{ref}from'vue'import......
  • Vue3中的defineProps方法
    1.什么是definePropsdefineProps是Vue3中的一种新的组件数据传递方式,可以用于在子组件中定义接收哪些父组件的props。当父组件的props发生变化时,子组件也会随之响应。2.如何使用defineProps?在子组件中可以使用defineProps声明该组件需要接收的props,它需要传递一个包含props字段......
  • vue3中父组件与组件之间参数传递,使用(defineProps/defineEmits),涉及属性传递,对象传递,
    Vue3中子父组件之间的通信一、父组件传递参数到子组件采用defineProps传递属性父组件:<template><div><h1>这是父组件</h1><h1>父组件像子组件传递参数</h1><h2>传递属性值</h2><HH:fatherMessage="fatherMessage":valNum="valNum":valBool=......
  • vue中<script setup>中使用watch、computed、props、defineExpose、defineEmits等方法
    <scriptsetup>是在单文件组件(SFC)中使用组合式API的编译时语法糖。相比于普通的<script>语法,它具有更多优势:更少的样板内容,更简洁的代码。能够使用纯TypeScript声明props和抛出事件。更好的运行时性能(其模板会被编译成与其同一作用域的渲染函数,没有任何的中间......
  • Vue3 - defineProps 设置默认值
    在TS中,仅类型声明的一个缺点defineProps是它无法为props提供默认值。为了解决这个问题,withDefaults还提供了一个编译器宏,同时给出JS默认值的写法<scriptsetuplang="ts......