跨越世代的对话:Vue3与Vue2组件通信方式的对比与实战

        在Vue3的世界里,组件之间的通信就像是社区中的居民交流信息。有的信息只需要邻居间悄悄传递,有的则需要整个社区都知道。Vue3提供了多种方式来实现这种交流,让我们用生活中的例子来解释这些通信方式,并附上Vue3的简单代码示例。

1. Props & Emits(父子通信)

理解:

        想象一下,你在家里做了一些美味的蛋糕,想要分享给你的父母。你把蛋糕放在盘子里,通过传递盘子(props)来让你的父母品尝。这就是父子组件之间的通信方式。

  • 父亲(父组件):"儿子,你做的蛋糕真好吃!"
  • 儿子(子组件):通过传递蛋糕(props)来回应。

代码示例:

<!-- 父组件 -->
<template>
  <!-- ... -->
  <ChildComponent :cake="myCake" @requestCake="shareCake" />
  <!-- ... -->
</template>
<script setup>
import { ref } from 'vue';
import ChildComponent from './ChildComponent.vue';

const myCake = ref('巧克力蛋糕');
// 省略其他逻辑...

function shareCake(flavor) {
  myCake.value = flavor;
}
</script>

<!-- 子组件 -->
<template>
  <button @click="requestCake">请求草莓蛋糕</button>
  <p>{{ cake }}</p>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue';

const props = defineProps(['cake']);
const emit = defineEmits(['requestCake']);
// 省略其他逻辑...

function requestCake() {
  emit('requestCake', '草莓蛋糕'); // 触发父组件的事件
}
</script>

Vue3 vs Vue2 对比

  • Vue3中引入了defineProps和defineEmits宏来声明props和emits,这使得在组合式API中使用更加简洁。
  • Vue2中通常在组件选项中定义props,如props: ['cake'],而Vue3的组合式API提供了更现代化的语法。

2. Provide & Inject(祖先-后代通信)

理解:

        假设你是一个家族的长辈,你有一个秘密配方想要传给你的孙子孙女。你可以通过口头传授(provide)这个秘密给他们,而他们可以随时使用(inject)这个秘密来制作美食。

  • 祖父(祖先组件):"孩子们,这是我珍藏的烤鸭秘方。"
  • 孙子(后代组件):通过注入(inject)来获取秘方并制作烤鸭。

代码示例:

<!-- 祖先组件 -->
<template>
  <GrandchildComponent />
</template>
<script setup>
import { provide } from 'vue';
import GrandchildComponent from './GrandchildComponent.vue';

provide('secretRecipe', '家族烤鸭秘方');
// 省略其他逻辑...
</script>

<!-- 后代组件 -->
<template>
  <div>{{ secretRecipe }}</div>
</template>
<script setup>
import { inject } from 'vue';

const secretRecipe = inject('secretRecipe');
// 省略其他逻辑...
</script>

Vue3 vs Vue2 对比:

  • Vue3中provide和inject的使用变得更加直观,可以直接在组合式API的setup函数中使用。
  • Vue2中需要分别在data和后代组件的created生命周期钩子中使用this.$parent.provide()和this.$parent.inject()。

3. Vuex(全局状态管理)

理解:

        如果你是一个社区的管理员,你需要确保所有的居民都能及时得到重要信息,比如停电通知。你可以通过社区广播(Vuex)来实现这一点。

  • 社区管理员(Vuex store):"各位居民,今晚9点将会有停电维护。"
  • 居民(任何组件):通过收听广播(访问store)来获取信息。

代码示例:

javascript:

// Vuex store
import { createStore } from 'vuex';
export default createStore({
  state: {
    message: '今晚9点将会有停电维护'
  },
  mutations: {
    updateMessage(state, newMessage) {
      state.message = newMessage;
    }
  }
});

vue:

<!-- 任何组件 -->
<template>
  <p>{{ $store.state.message }}</p>
</template>
<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  $store.commit('updateMessage', '新的通知:停电时间改为10点');
  // 省略其他逻辑...
});
</script>

Vue3 vs Vue2 对比:

  • Vue3中的Vuex仍然是全局状态管理的首选,但Vue3的组合式API使得局部状态管理变得更加容易,有时候可以减少对Vuex的依赖。
  • Vue2和Vue3中Vuex的核心概念和用法基本相同,但在Vue3中,由于组合式API的引入,状态管理的代码组织方式可能会有所不同。

4. Reactive Variables(自定义响应式变量)

理解:

        有时候,你只想在几个特定的朋友之间分享一些私密的事情,而不是整个社区。这时,你可以创建一个只有你们知道的秘密语言(reactive variables)。

  • 好友A(组件A):"嘿,我有一个小秘密告诉你。"
  • 好友B(组件B):通过共享的秘密语言(reactive variables)来理解秘密。

代码示例:

javascript:

// sharedVariables.js
import { reactive } from 'vue';

export const sharedSecret = reactive({
  message: '这是一个秘密',
});

vue:

<!-- 组件A -->
<template>
  <button @click="updateSecret">更新秘密</button>
</template>
<script setup>
import { sharedSecret } from './sharedVariables.js';

function updateSecret() {
  sharedSecret.message = '新的秘密';
  // 省略其他逻辑...
}
</script>

<!-- 组件B -->
<template>
  <div>{{ sharedSecret.message }}</div>
</template>
<script setup>
import { sharedSecret } from './sharedVariables.js';
// 省略其他逻辑...
</script>

Vue3 vs Vue2 对比:

  • Vue3的组合式API允许开发者更自由地创建和管理响应式数据,不再局限于组件实例内部。
  • Vue2中的响应式数据通常绑定在组件实例的data选项中,而Vue3的响应式系统更加灵活,可以在组件之外创建响应式变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770768.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

六.核心动画 - 特殊图层①

引言 本专栏到目前为止已经介绍了CALayer&#xff0c;了解了它的绘画和动画功能。但是Core Animation图层不仅仅能够用于图片和颜色&#xff0c;本篇博客就来介绍一下一些CALayer的子类特殊图层&#xff0c;来进一步扩展Core Animation的绘图能力。 特殊图层 Core Animation…

Vue实现金钱输入框组件自动带千位逗号

新建PriceInput.vue <template><div id"bord"><el-inputv-model"inputValue"v-bind"$attrs":maxlength"maxlength"input"handleInput"focus"handleFocus"blur"handleBlur"change"h…

自闭症儿童:探索症状背后的多彩内心世界

在星启帆自闭症康复中心&#xff0c;我们每天与一群独特而珍贵的孩子相遇——他们&#xff0c;是自闭症谱系障碍的患儿。自闭症&#xff0c;这一复杂的神经发育障碍&#xff0c;以其多样化的症状表现&#xff0c;为每个孩子的生活轨迹绘上了不同的色彩。 自闭症孩子的症状各异…

Websocket通信实战项目(js)(图片互传应用)(下)客户端H5+css+js实现

Rqtz : 个人主页 ​ 共享IT之美&#xff0c;共创机器未来 Sharing the Beauty of IT and Creating the Future of Machines Together 目录 起始 客户端GUI Javascripts连接websocket 使用localStorage保存用户输入的IP Websocket连接成功 Websocket接收数据 解析…

【Linux】正确的关机方法

1. Linux正确的关机方式 如何关机呢&#xff1f;我想&#xff0c;很多朋友在DOS年代已经有在玩计算机了。在当时我们关闭DOS的系统时&#xff0c;常常是直接关闭电源开关&#xff0c;而Windows 在你不爽的时候&#xff0c;按着电源开关四秒也可以关机&#xff0c;但是在Linux则…

旧衣回收小程序:减少资源浪费,提高回收效率

当下&#xff0c;旧衣服回收成为了大众热衷的事&#xff0c;不少居民都会把闲置的衣物进行回收&#xff0c;旧衣回收行业逐渐火爆。不过&#xff0c;传统的旧衣回收模式已经不符合当下时代发展&#xff0c;具有较大的不便利性。 因此&#xff0c;为解决这一问题&#xff0c;线…

PG实践|内置函数之GENERATE_SERIES之深入理解(二)

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

使用Vue CLI方式创建Vue3.0应用程序

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。新版本的 Vue CLI 的包名由原来的 vue-cli 改成了 vue/cli。 在开发大型项目时&#xff0c;需要考虑项目的组织结构、项目构建和部署等问题。如果手动完成这些配置工作&#xff0c;工作效率会非常低。为此&#xff0c;Vue.…

Rocky Linux 9 快速安装docker 教程

前述 CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 及后续版本&#xff0c;不再支持新的软件和补丁更新。CentOS用户现有业务随时面临宕机和安全风险&#xff0c;并无法确保及时恢复。由于 CentOS Stream 相对不稳定&#xff0c;刚好在寻找平替系统…

Python学生信息管理系统(完整代码)

引言&#xff1a;&#xff08;假装不是一个大学生课设&#xff09;在现代教育管理中&#xff0c;学生管理系统显得尤为重要。这种系统能够帮助教育机构有效地管理学生资料、成绩、出勤以及其他教育相关活动&#xff0c;从而提高管理效率并减少人为错误。通过使用Python&#xf…

IDEA版本推荐

推荐版本&#xff1a; IDEA 2024.1.4 下载链接&#xff1a;IDEA下载 &#xff08;下载时可以往下拖&#xff0c;选到自己想要的版本哦&#xff09; 本人由于项目开发需要&#xff0c;陆续用过几个版本的IDEA&#xff0c;包括&#xff1a; IDEA 2020.2.4 。这是在看韩顺平老师…

昇思25天学习打卡营第9天|CycleGAN图像风格迁移互换

文章目录 昇思MindSpore应用实践基于MindSpore的CycleGAN图像风格迁移互换1、CycleGAN 概述2、生成器部分3、判别器部分4、优化器和损失函数5、模型训练6、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于MindSpore的C…

打造商贸物流“产-供-销”、“仓-运-配”全流程供应链

在当今全球化的商业环境中&#xff0c;商贸物流平台的搭建成为企业提升效率、降低成本并增强市场竞争力的关键因素。在现代商业环境中&#xff0c;商贸与物流之间的紧密协作是业务成功的关键因素。然而&#xff0c;许多组织面临着信息不对称、资源配套不足、以及系统间隔离等痛…

Windows的管理工具

任务计划程序&#xff1a;这是一个用来安排任务自动运行的工具。你可以在这里创建新的任务&#xff0c;设定触发条件&#xff0c;并指定任务的操作。 事件查看器&#xff1a;这是一套日志记录和分析工具&#xff0c;&#xff0c;你可以了解到系统的工作状况&#xff0c;帮助诊…

Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享

本书从一个系统化的视角&#xff0c;秉承大道至简的主导思想&#xff0c;介绍Spark中最值得关注的内 容&#xff0c;讲解Spark部署、开发实战&#xff0c;并结合Spark的运行机制及拓展&#xff0c;帮读者开启Spark技术之旅。 Spark大数据处理&#xff1a;技术、应用与性能优化…

阿里云邮件推送邮件发送失败的问题排查解决

阿里云邮件推送为何失败&#xff1f;解决邮件推送失败的步骤指南&#xff01; 即便是功能强大的阿里云邮件推送服务&#xff0c;也可能在实际使用中遇到邮件发送失败的问题。AokSend将详细介绍如何排查和解决阿里云邮件推送邮件发送失败的问题。 阿里云邮件推送&#xff1a;验…

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木&#xff0c;我们可以构建出城堡、飞机、甚至整个城市。现在&#xff0c;想象一下如果有一个数字世界的乐高&#xff0c;我们可以用这样的“积木”来构建智能程序&#xff0c;这些程序能够阅读、理解和撰写文本&#xf…

6.26.3 基于Transformer的深度神经网络在数字乳腺断层合成图像上的乳腺癌分类

开发一种有效的深度神经网络模型&#xff0c;该模型结合了相邻图像部分的上下文&#xff0c;以检测数字乳腺断层合成(DBT)图像上的乳腺癌。 数字乳房断层合成(DBT)是一种医学成像技术&#xff0c;其中检测器围绕患者以有限角度旋转并记录多幅图像。然后将这些图像重建为二维(2D…

盛元广通打造智慧校园实验室安全管理系统

盛元广通智慧校园实验室安全管理系统以安全为重点&#xff0c;构建由学校、二级单位、实验室组成的三级联动的实验室安全多级管理体系、多类用户角色&#xff0c;内置教育部标准检查表&#xff0c;支撑实验室相关业务过程的智慧管理。实现通过PC端/手机移动端开展检查工作、手机…

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域&#xff0c;它在许多应用中扮演着关键角色&#xff0c;如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一&#xff0c;它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…