vue3中的子组件向父组件通信和父组件向子组件通信

一、父组件向子组件通信:Props

父组件通过 ​​属性绑定​ ​ 传递数据,子组件通过 defineProps接收数据。

​特点​​:单向数据流(子组件不可直接修改 Props)。

代码示例:

​父组件 (ParentComponent.vue)​​:

java 复制代码
<template>  
  <ChildComponent :message="parentMessage" :user="userData" />  
</template>  

<script setup>  
import { ref } from 'vue';  
import ChildComponent from './ChildComponent.vue';  

const parentMessage = ref('Hello from Parent');  
const userData = ref({ name: 'Alice', age: 25 });  
</script>

​子组件 (ChildComponent.vue)​​:

java 复制代码
<template>  
  <div>  
    <p>{{ message }}</p>  <!-- 输出:Hello from Parent -->  
    <p>{{ user.name }} ({{ user.age }})</p>  <!-- 输出:Alice (25) -->  
  </div>  
</template>  

<script setup>  
const props = defineProps({  
  message: { type: String, required: true },  
  user: { type: Object, default: () => ({}) }  
});  
</script>

​关键点​​:

  • Props 需在子组件中显式声明类型和验证规则。

  • 复杂数据(如 Object/Array)应使用 refreactive保持响应性。


📩 二、子组件向父组件通信:自定义事件

子组件通过 defineEmits声明事件,用 emit()触发事件;父组件通过 @事件名监听并处理数据。

代码示例:

​子组件 (ChildComponent.vue)​​:

java 复制代码
<template>  
  <button @click="sendData">提交数据</button>  
</template>  

<script setup>  
const emit = defineEmits(['data-submitted']);  

function sendData() {  
  emit('data-submitted', { id: 1, value: '子组件数据' });  
}  
</script>

​父组件 (ParentComponent.vue)​​:

java 复制代码
<template>  
  <ChildComponent @data-submitted="handleData" />  
</template>  

<script setup>  
function handleData(payload) {  
  console.log(payload); // { id: 1, value: '子组件数据' }  
}  
</script>
相关推荐
Bs_MoneyMagnet2 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
AlienZHOU6 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
Captaincc9 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
计算机魔术师11 小时前
德国Wiki被黑后两周,OpenAI终于把模型失控的账本摊开了
前端
kyriewen11 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程
IT_陈寒11 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
前端snow12 小时前
ai agent --- 多agent框架之图编排引擎-langgraph
前端
竹林81812 小时前
OmniPic Studio v3.2.1 核心技术架构与全平台发版解析文档
前端·浏览器
JamesZhang8007812 小时前
页面内存只涨不跌? 一次泄漏排查, 牵出 WeakMap 的诞生
前端
Z小明12 小时前
第 6 章 组件进阶
前端·vue.js