Vue3组件间的通信方式详解

yizhihongxing

Vue3组件间的通信方式详解

Vue3是一款强大的前端开发框架,它的组件化开发模式使得组件间通信成为必不可少的一部分。Vue3支持多种组件间通信方式,以满足不同场景下的需求。本文将详细讲解Vue3组件间的通信方式。

Props

Props是父组件向子组件传递数据的一种方式。在父组件中使用子组件时,通过在子组件上添加属性来向子组件传递数据。在子组件中通过props接收父组件传递的数据。示例代码如下:

父组件

<template>
  <div>
    <ChildComponent message="Hello Vue3"></ChildComponent>
  </div>
</template>
<script>
import ChildComponent from './components/ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  }
}
</script>

子组件

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>
<script>
export default {
  name: 'ChildComponent',
  props: {
    message: {
      type: String,
      default: ''
    }
  }
}
</script>

Emit

Emit是Vue3提供的一种子组件向父组件传递数据的方式。通过在子组件中使用$emit()方法触发一个自定义事件,并在父组件中使用@自定义事件名监听该事件来接收子组件传递的数据。示例代码如下:

父组件

<template>
  <div>
    <ChildComponent @sendMsg="receiveMsg"></ChildComponent>
    <p>{{ msg }}</p>
  </div>
</template>
<script>
import ChildComponent from './components/ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  data() {
    return {
      msg: ''
    }
  },
  methods: {
    receiveMsg(msg) {
      this.msg = msg;
    }
  }
}
</script>

子组件

<template>
  <div>
    <button @click="sendMessage">发送消息</button>
  </div>
</template>
<script>
export default {
  name: 'ChildComponent',
  methods: {
    sendMessage() {
      this.$emit('sendMsg', 'Hello Vue3');
    }
  }
}
</script>

Provide/Inject

Provide/Inject是Vue3提供的一种父组件向子组件传递数据的方式。在父组件中通过provide选项提供数据,然后在子组件中通过inject选项来注入数据。示例代码如下:

父组件

<template>
  <div>
    <ChildComponent></ChildComponent>
  </div>
</template>
<script>
import ChildComponent from './components/ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  provide() {
    return {
      message: 'Hello Vue3'
    }
  }
}
</script>

子组件

<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>
<script>
export default {
  name: 'ChildComponent',
  inject: ['message']
}
</script>

$attrs/$listeners

在Vue3中,父组件向子组件传递的数据不仅仅局限于上述提到的方式。父组件传递到子组件的属性和事件也可以在子组件中使用。在子组件模板中,通过 $attrs$listeners 分别访问父组件传递下来的非 prop 特性和监听器(事件)。示例代码如下:

父组件

<template>
  <div>
    <ChildComponent title="Hello" @change="handleChange"></ChildComponent>
  </div>
</template>
<script>
import ChildComponent from './components/ChildComponent.vue';

export default {
  name: 'ParentComponent',
  components: {
    ChildComponent
  },
  methods: {
    handleChange(e) {
      console.log(e.target.value);
    }
  }
}
</script>

子组件

<template>
  <div>
    <input v-bind="$attrs" v-on="$listeners" />
  </div>
</template>
<script>
export default {
  name: 'ChildComponent',
  inheritAttrs: false
}
</script>

以上是Vue3中常用的几种组件间通信方式,当然还有其他的方式,如provide/inject函数、Vuex等。根据实际需求选择合适的方式进行组件间通信。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3组件间的通信方式详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解vue.js移动端配置flexible.js及注意事项

    详解vue.js移动端配置flexible.js及注意事项 介绍 随着移动端市场的扩大,越来越多的网站和应用开始关注移动端的适配问题。Vue.js作为一种前端开发的流行框架,也需要考虑移动端适配问题。本文将介绍如何在Vue.js中配置flexible.js实现移动端适配,以及在使用过程中需要注意的细节。 flexible.js介绍 flexible.js是淘…

    Vue 2023年5月28日
    00
  • 关于Vue代码可读性的几点建议

    关于Vue代码可读性的几点建议会涉及到多个方面,我将详细讲解: 1. 格式规范 1.1 使用合适的缩进 在编写Vue代码时,应该合理地使用缩进来让代码更加易读。通常推荐使用4个空格作为缩进,而不是使用制表符。例如: <template> <div> <h1>{{ title }}</h1> <p>{…

    Vue 2023年5月29日
    00
  • React中Portals与错误边界处理实现

    当React应用程序遇到问题或出现错误时,错误边界(error boundaries)特别有用。错误边界是React组件,它会在渲染期间捕获并打印任何在树的子组件中抛出的JavaScript错误,并且,相当于错误被“停留”在边界内,防止应用程序崩溃。下面就让我们来详细讲解React中的错误边界处理以及Portals的使用。 错误边界(Error Bounda…

    Vue 2023年5月28日
    00
  • vue项目打包后,由于html被缓存导致出现白屏的处理方案

    当 Vue 项目部署到线上服务器时,我们可能会遇到“白屏”问题,此现象通常是由于浏览器缓存的 HTML 文件。为了解决这种问题,我们可以尝试以下几种处理方案: 1. 在 index.html 中设置 meta 标签 在 index.html 文件的 head 标签里添加如下代码,告诉浏览器不要缓存: <meta http-equiv="Pra…

    Vue 2023年5月28日
    00
  • Vue核心概念Action的总结

    下面是Vue核心概念Action的总结的完整攻略。 什么是Action Action是Vuex服务于mutations的触发器,用于处理异步请求和复杂的逻辑。 Action的语法 在Vuex中,定义一个Action的语法如下: actions: { actionName (context, payload) { // 逻辑处理 } } 其中,actions是…

    Vue 2023年5月27日
    00
  • vuex操作state对象的实例代码

    下面是详细讲解“Vuex操作state对象的实例代码”的攻略。 1. 理解Vuex和state对象的基本概念 Vuex是一个专门为Vue.js设计的状态管理库,主要用于管理Vue.js应用程序中的状态。在使用Vuex的过程中,最核心的概念就是state对象。 state对象是Vuex中的一个重要部分,它类似于Vue.js组件中的data对象,但是它被所有组件…

    Vue 2023年5月28日
    00
  • vue3 reactive响应式依赖收集派发更新原理解析

    下面我将为您详细讲解“vue3 reactive响应式依赖收集派发更新原理解析”的完整攻略。 什么是Vue3的响应式依赖收集派发更新原理? Vue3的响应式依赖收集派发更新原理是Vue3中非常重要的一个概念,它是实现Vue3响应式功能的核心原理。具体来说,Vue3响应式依赖收集派发更新原理指的是:当响应式对象的属性被访问时,系统会将该属性所对应的依赖收集起来…

    Vue 2023年5月28日
    00
  • vue2.x中h函数(createElement)与vue3中的h函数详解

    下面详细讲解“vue2.x中h函数(createElement)与vue3中的h函数详解”的完整攻略。 什么是h函数 在Vue中,h函数意味着创建虚拟DOM节点。 在Vue 2版本中,这个函数叫‘createElement’,但是在Vue 3引入了更新后的h函数,它有更好的类型推断和更简洁的API。 Vue 2.x 中h函数(createElement)的使…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部