当前位置: 首页 > news >正文

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>

效果显示

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • django orm的Q和~Q的数据相加并不一定等于总数
  • 影视会员充值API接口如何开发?
  • 生物信息学:DNA序列的构成
  • 大模型battle,哪家才是真的“价美”也“物美”
  • windows 11/ubuntu Teredo 设置 (ipv4 转 ipv6)
  • Python2.x 与 3.x 版本区别
  • SQLi-LABS通关攻略【51-55关】
  • Jmeter下载、配置环境变量
  • 从插件plugin和钩子hook 到“智能化自动化”架构
  • Spring——控制反转(IOC)与依赖注入(DI)
  • python3 logging入门
  • 前端换行、空格的多种表现形式
  • 【Java设计模式】集合管道模式:简化数据操作
  • python-奥运奖牌计数
  • 鸿蒙OS试题(10)
  • 分享的文章《人生如棋》
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「译」Node.js Streams 基础
  • 【comparator, comparable】小总结
  • centos安装java运行环境jdk+tomcat
  • ES10 特性的完整指南
  • Java读取Properties文件的六种方法
  • Mocha测试初探
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python学习笔记 - ThreadLocal
  • react-native 安卓真机环境搭建
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于游标的分页接口实现
  • 记录一下第一次使用npm
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 我感觉这是史上最牛的防sql注入方法类
  • 小程序测试方案初探
  • 用element的upload组件实现多图片上传和压缩
  • postgresql行列转换函数
  • 阿里云API、SDK和CLI应用实践方案
  • ​iOS安全加固方法及实现
  • ​卜东波研究员:高观点下的少儿计算思维
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #pragma once
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)Jupyter Notebook 下载及安装
  • (1)SpringCloud 整合Python
  • (6)设计一个TimeMap
  • (zhuan) 一些RL的文献(及笔记)
  • (二)fiber的基本认识
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (离散数学)逻辑连接词
  • (七)理解angular中的module和injector,即依赖注入
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (原創) 物件導向與老子思想 (OO)
  • (转)LINQ之路
  • (轉)JSON.stringify 语法实例讲解
  • .apk 成为历史!
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .CSS-hover 的解释