vue3 两个组件之间传值

Props

父组件可以通过 props 将数据传递给子组件。这是最常见的组件间通信方式

html 复制代码
   <!-- 父组件 -->
   <template>
     <ChildComponent :message="parentMessage" />
   </template>

   <script>
   import ChildComponent from './ChildComponent.vue';

   export default {
     components: {
       ChildComponent,
     },
     data() {
       return {
         parentMessage: 'Hello from Parent',
       };
     },
   };
   </script>
html 复制代码
   <!-- 子组件 -->
   <template>
     <div>{{ message }}</div>
   </template>

   <script>
   export default {
     props: {
       message: String,
     },
   };
   </script>

自定义事件 (Emit)

子组件可以通过 $emit 触发事件将数据传递回父组件。

html 复制代码
   <!-- 子组件 -->
   <template>
     <button @click="sendToParent">Send to Parent</button>
   </template>

   <script>
   export default {
     methods: {
       sendToParent() {
         this.$emit('custom-event', 'Hello from Child');
       },
     },
   };
   </script>
html 复制代码
   <!-- 父组件 -->
   <template>
     <ChildComponent @custom-event="handleEvent" />
   </template>

   <script>
   import ChildComponent from './ChildComponent.vue';

   export default {
     components: {
       ChildComponent,
     },
     methods: {
       handleEvent(message) {
         console.log(message);
       },
     },
   };
   </script>

Vuex

Vuex 是 Vue 的状态管理库,可以用来在多个组件间共享状态。

Provide / Inject

这是一种从祖先组件注入数据到后代组件的方式,而无需逐层传递 props。

Ref 和 Reactive

使用 Composition API,可以利用 refs 和 reactive 数据来实现组件间的通信。

Event Bus

虽然在 Vue 3 中,官方推荐使用 Composition API 和其它更现代的通信方式,但在某些情况下,你可能仍然会使用 Event Bus(事件总线)。这通常涉及到创建一个全局事件中心,组件可以通过它发送和接收事件。

javascript 复制代码
   // src/eventBus.js
   import { onMounted, onBeforeUnmount } from 'vue';
   import mitt from 'mitt';

   const eventBus = mitt();

   export default eventBus;
html 复制代码
   <!-- 发送方组件 -->
   <script>
   import eventBus from '@/eventBus';

   export default {
     onMounted() {
       eventBus.on('someEvent', payload => {
         console.log(payload);
       });
     },
     onBeforeUnmount() {
       eventBus.off('someEvent');
     },
     methods: {
       triggerEvent() {
         eventBus.emit('someEvent', 'Hello from Sender');
       },
     },
   };
   </script>

选择哪种方式取决于你的具体需求和组件层次结构。对于简单的父子组件关系,使用 Props 和自定义事件通常就足够了。对于更复杂的场景,如非父子组件之间的通信,Vuex 或者 Event Bus 可能会更加合适。

相关推荐
我即将远走丶或许也能高飞33 分钟前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
钟离墨笺1 小时前
Go语言--2go基础-->基本数据类型
开发语言·前端·后端·golang
爱吃泡芙的小白白1 小时前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
卓怡学长2 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏
码上成长2 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
老陈聊架构2 小时前
『AI辅助Skill』掌握三大AI设计Skill:前端独立完成产品设计全流程
前端·人工智能·claude·skill
油丶酸萝卜别吃2 小时前
Mapbox GL JS 表达式 (expression) 条件样式设置 完全指南
开发语言·javascript·ecmascript
Ulyanov3 小时前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
cypking3 小时前
二、前端Java后端对比指南
java·开发语言·前端
摘星编程3 小时前
用React Native开发OpenHarmony应用:timing定时动画参数
javascript·react native·react.js