欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > vue3 两个组件之间传值

vue3 两个组件之间传值

2024/10/24 1:59:26 来源:https://blog.csdn.net/A18937260063/article/details/140348726  浏览:    关键词:vue3 两个组件之间传值

Props

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

   <!-- 父组件 --><template><ChildComponent :message="parentMessage" /></template><script>import ChildComponent from './ChildComponent.vue';export default {components: {ChildComponent,},data() {return {parentMessage: 'Hello from Parent',};},};</script>
   <!-- 子组件 --><template><div>{{ message }}</div></template><script>export default {props: {message: String,},};</script>

自定义事件 (Emit) 

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

   <!-- 子组件 --><template><button @click="sendToParent">Send to Parent</button></template><script>export default {methods: {sendToParent() {this.$emit('custom-event', 'Hello from Child');},},};</script>
   <!-- 父组件 --><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(事件总线)。这通常涉及到创建一个全局事件中心,组件可以通过它发送和接收事件。

   // src/eventBus.jsimport { onMounted, onBeforeUnmount } from 'vue';import mitt from 'mitt';const eventBus = mitt();export default eventBus;
   <!-- 发送方组件 --><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 可能会更加合适。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com