前端学习系列(8):Vue.js进阶——组件通信与状态管理

前端|Vue Vue3 超详细 实现组件通信: 父子、子父及兄弟组件间的数据流转 Vue 3 提供了多种组件间通信的方式,这些方式满足了从简单父子通信到复杂全局状态管理的各种需求。props和自定义事件依旧是父子组件通信的首选方式,provide和inject提供了一种新的兄弟组件通信方法,而 Vuex 依旧是管理大型应用状态的强大工具。理解这些通信机制的适用场景和限制,将帮助你构建更加可维护和高效的 Vue 应用。 阅读详情

前端学习系列(8):Vue.js进阶——组件通信与状态管理

一、回顾与引入

在上一期对Vue.js的学习中,我们掌握了Vue.js的基础内容,包括创建Vue实例、数据绑定、指令使用和组件化开发。本期将深入学习Vue.js的进阶知识,重点探讨组件间的通信方式以及状态管理的重要性和实现方法,这对于构建大型复杂的Vue应用至关重要。

二、父子组件之间的通信

2.1 父传子:通过props传递数据

在Vue中,父组件向子组件传递数据是通过props实现的。在子组件中,通过props选项来接收父组件传递的值。例如,有一个Parent组件和Child组件:

<!-- Parent.vue -->
<template>
  <div>
    <h2>我是父组件</h2>
    <child :message="parentMessage"></child>
  </div>
</template>

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

export default {
  components: {
    Child
  },
  data() {
    return {
      parentMessage: '这是来自父组件的数据'
    };
  }
};
</script>
<!-- Child.vue -->
<template>
  <div>
    <p>我是子组件,接收到的数据:{{ message }}</p>
  </div>
</template>

<script>
export default {
  props: ['message']
};
</script>

在上述代码中,父组件Parent通过:绑定动态地将parentMessage传递给子组件Child,子组件通过props接收并展示数据。

2.2 子传父:通过事件触发传递数据

子组件向父组件传递数据则是通过自定义事件实现的。子组件使用$emit方法触发一个自定义事件,并传递数据,父组件通过在子组件标签上监听该事件来接收数据。例如:

<!-- Child.vue -->
<template>
  <div>
    <button @click="sendDataToParent">点击我传递数据</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendDataToParent() {
      const data = '这是子组件传递的数据';
      this.$emit('child - data - event', data);
    }
  }
};
</script>
<!-- Parent.vue -->
<template>
  <div>
    <h2>我是父组件</h2>
    <child @child - data - event="handleChildData"></child>
  </div>
</template>

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

export default {
  components: {
    Child
  },
  methods: {
    handleChildData(data) {
      console.log('接收到子组件的数据:', data);
    }
  }
};
</script>

这里子组件Child在按钮点击时,通过$emit触发child - data - event事件并传递数据,父组件Parent监听该事件并在回调函数handleChildData中处理数据。

三、非父子组件之间的通信

3.1 使用事件总线(Event Bus)

事件总线是一种简单的非父子组件通信方式,适用于组件关系较为简单、通信频率不高的场景。创建一个空的Vue实例作为事件总线,所有需要通信的组件都可以通过这个实例来触发和监听事件。例如:

// eventBus.js
import Vue from 'vue';
export const eventBus = new Vue();
<!-- ComponentA.vue -->
<template>
  <div>
    <button @click="sendMessage">发送消息</button>
  </div>
</template>

<script>
import { eventBus } from './eventBus.js';

export default {
  methods: {
    sendMessage() {
      const message = '来自ComponentA的消息';
      eventBus.$emit('message - event', message);
    }
  }
};
</script>
<!-- ComponentB.vue -->
<template>
  <div>
    <!-- 接收消息 -->
  </div>
</template>

<script>
import { eventBus } from './eventBus.js';

export default {
  created() {
    eventBus.$on('message - event', (message) => {
      console.log('ComponentB接收到消息:', message);
    });
  },
  beforeDestroy() {
    eventBus.$off('message - event');
  }
};
</script>

在上述代码中,ComponentA通过事件总线eventBus触发message - event事件并传递消息,ComponentB在created钩子函数中监听该事件并处理消息,同时在beforeDestroy钩子函数中取消监听,防止内存泄漏。

3.2 使用Vuex进行状态管理(适用于大型项目)

Vuex是Vue.js的状态管理模式,它采用集中式存储管理应用的所有组件的状态。在大型项目中,组件关系复杂,使用Vuex可以更好地管理共享状态。

首先安装Vuex:

npm install vuex --save

然后创建一个store目录,在其中创建index.js文件来配置Vuex:

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    sharedData: '初始共享数据'
  },
  mutations: {
    updateSharedData(state, newData) {
      state.sharedData = newData;
    }
  },
  actions: {
    updateData({ commit }, newData) {
      commit('updateSharedData', newData);
    }
  }
});

export default store;

在Vue应用的入口文件(通常是main.js)中引入并使用Vuex:

// main.js
import Vue from 'vue';
import App from './App.vue';
import store from './store';

Vue.config.productionTip = false;

new Vue({
  store,
  render: h => h(App)
}).$mount('#app');

在组件中使用Vuex的状态和方法:

<!-- ComponentC.vue -->
<template>
  <div>
    <p>{{ $store.state.sharedData }}</p>
    <button @click="updateData">更新数据</button>
  </div>
</template>

<script>
export default {
  methods: {
    updateData() {
      const newData = '更新后的共享数据';
      this.$store.dispatch('updateData', newData);
    }
  }
};
</script>

在这个例子中,ComponentC组件通过$store.state访问共享状态sharedData,通过$store.dispatch触发updateData action来更新状态,action再通过提交updateSharedData mutation来修改状态。

四、Vuex状态管理深入解析

4.1 Vuex的核心概念

  • State:存储应用的状态数据,是Vuex的数据源。所有组件都可以读取State中的数据。
  • Mutations:用于修改State中的数据,必须是同步函数。通过提交Mutation来更新State,保证状态变化的可追踪性。
  • Actions:可以包含异步操作,通过dispatch触发。Actions不直接修改State,而是通过提交Mutation来间接修改State。
  • Getters:用于从State中派生出一些状态,类似于计算属性。Getters可以对State进行过滤、计算等操作,提供更方便的访问方式。

4.2 在复杂项目中的应用场景

在复杂的Vue项目中,例如电商应用,用户登录状态、购物车数据等共享状态可以通过Vuex进行管理。不同组件之间需要共享这些状态并进行实时更新,使用Vuex可以确保状态的一致性和可维护性。例如,在购物车组件中添加商品时,通过触发action提交mutation来更新购物车数据,其他关联组件(如购物车数量显示组件、结算组件)会自动获取更新后的购物车状态并展示最新数据。

五、总结与下期预告

本期我们深入学习了Vue.js组件之间的通信方式,包括父子组件通信和非父子组件通信,并且详细了解了Vuex状态管理的概念和应用。这些知识对于构建大型、可维护的Vue应用至关重要。

下期预告
《React进阶:深入组件通信与状态管理》你将学到:

  • React中更复杂的组件通信模式,如上下文(Context)的使用
  • Redux状态管理库的基本原理和使用方法
  • 如何在React项目中结合Redux进行高效的状态管理和应用开发

📢 系列提示:本系列持续更新中,建议点👍/收藏本篇文章,关注作者及时获取更新提醒。有任何问题欢迎评论区留言交流!

从零开始搭建自己的VueJS2.0+ElementUI单页面网站(三、组件编写及通信) 前言本文是本系列的第三篇文章。在前两篇文章中我们介绍了关于搭建vue+elementUI开发环境的方法和编写导航页的方法。关于前两篇文章的内容,若读者有些记不清楚,可以点击下方链接快速查看: 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建) 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(二、编写导航页) 阅读详情

相关推荐

Vue.js 从入门到精通:全面解析组件化、路由与状态管理(附 Todo 案例)

本文全面介绍了 Vue.js 从入门到精通的知识。首先阐述了 Vue 的简介及环境搭建方法,包括安装 Node.js 和 Vue CLI。接着详细讲解了 Vue 的基本语法,如模板语法和指令的使用。重点介绍了组件化开发,包括创建和使用组件,以及组件通信的多种方式。在路由管理方面,讲解了 Vue Router 的安装、配置和使用,包括路由参数、查询参数和导航守卫。状态管理部分介绍了 Vuex 的安装、配置和使用,以及模块的概念。最后通过 Todo 应用案例综合运用了 Vue 的组件化、路由管理和状态管理知识。

weimengen的博客 1468

在Vue.js中,什么是组件通信?有哪些方法可以实现组件通信?

在Vue.js中,什么是组件通信?有哪些方法可以实现组件通信?

商务合作欢迎私信我 7113

前端 Vue.js 项目中的状态管理库选型与使用

本文旨在为Vue.js开发者提供全面的状态管理库选型指南和使用建议。状态管理的基本概念和必要性Vuex和Pinia的核心架构对比状态管理库的选型标准实际项目中的集成和使用模式性能优化和调试技巧未来发展趋势预测本文适用于中小型到大型Vue.js项目,特别关注现代Vue 3生态系统的状态管理解决方案。首先介绍状态管理的基本概念和Vue.js中的状态管理需求然后对比分析Vuex和Pinia的架构设计接着深入讲解核心算法和实现原理通过实际案例展示具体应用。

AI架构全栈开发实战笔记 1195

我的Vue.js前端框架技术的学习心得

在接触 Vue.js 前端框架的这段时间里,我仿佛踏入了一个充满创新与高效的前端开发世界,收获了许多宝贵的知识与经验,也深刻感受到了它给前端开发领域带来的变革力量。

mengjian18的博客 1534

Vue.js 状态管理:从本地状态到全局状态管理

在现代前端开发中,状态管理是一个非常重要的概念。随着应用规模的增大,组件之间的状态共享和通信变得越来越复杂。Vue.js 提供了多种状态管理的方式,从简单的本地状态管理到复杂的全局状态管理工具(如 Vuex 和 Pinia)。本文将深入探讨 Vue.js 中的状态管理,并帮助你选择适合你项目的解决方案。

vvilkin的学习备忘 1296

深入解析Vue.js组件开发:从基础到进阶

Vue组件是Vue框架中的一个基本概念,它是一段可重用的、具有独立功能的UI块。通过组件,开发者能够将UI分解为多个小的、易于管理的单元。这种模块化设计使得Vue在开发大型单页应用(SPA)时非常高效。模板(Template):组件的结构部分,用HTML来描述。脚本(Script):组件的行为部分,包含组件的业务逻辑。样式(Style):组件的样式部分,定义组件的外观。通过这些结构,Vue组件可以实现自定义逻辑、状态管理和视图渲染的分离,同时还支持组件的嵌套和重用。

2403_90036899的博客 1153

探索Vue.js的无限可能 —— vuejs-challenges

挑战自我,共同成长,Vue.js挑战等你来战!

2401_83063795的博客 2849

从原理到实战:ARS548 4D毫米波雷达数据处理与多模态融合全解析

本文深入解析了4D毫米波雷达ARS548的工作原理与数据处理全流程。从FMCW测距测速、MIMO虚拟天线阵列到点云生成的三步FFT处理,提供了详尽的Python代码实现。文章进一步探讨了与激光雷达、相机的多模态时空对齐与融合策略,并指导如何构建用于自动驾驶感知训练的多模态标注数据集,为相关算法工程师提供了从理论到实践的完整指南。

weixin_29161719的博客 366

前端学习系列(9):React进阶——深入组件通信与状态管理

本期我们深入学习了React中的复杂组件通信模式以及Redux状态管理库的使用。通过这些知识,我们能够更好地处理React应用中的数据流动和状态管理。下期预告《Angular进阶:深入服务与路由》你将学到Angular服务的高级特性,如依赖注入的深入理解和使用Angular路由的高级配置,包括路由守卫、嵌套路由等利用Angular服务和路由构建功能完备、安全可靠的单页应用程序📢系列提示有任何问题欢迎评论区留言交流!

Azperk的博客 1164

西门子PLC与汇川SV660P伺服速度模式配置实战指南

本文详细介绍了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的配置实战指南。从硬件接线、伺服参数配置到TIA Portal软件组态和PLC程序编写,提供了全面的操作步骤和实用技巧,帮助工程师快速解决伺服系统调试中的常见问题,确保系统稳定运行。

weixin_30316097的博客 500

一张图看懂中国民航适航审定体系:从适航司到审定中心,到底谁管谁?

本文深入解析中国民航适航审定体系,从立法层到执行层的完整链条,揭示适航管理的金字塔结构和核心流程。涵盖适航司、审定中心等关键机构职能,以及型号审定、生产许可审定等全生命周期管理,展现中国适航体系的特色实践与创新探索。

weixin_30896511的博客 476

前端Vue进阶

checkPwd为触发的自定义校验函数,这个函数的定义需要写在 data数据return的上面,其中参数二就是确认密码填写的值,需要和regForm.password的的值作对比参数三尤其注意,这个回调函数无论 密码 和确认密码 一不一致都必须调用一次data() {// 参数1: rule 对象, 是校验规则, 一般不用// 参数2: value 校验项的数据// 参数3: callback 回调函数, 决定是否校验通过if (value!

警警的博客 1376

群晖NAS从入门到精通的所有帖子汇总,只要这一篇就够了

本站陆陆续续的转载、原创帖子也有十几二十篇了,从不同的角度对群晖NAS的各种骚操作都有深入的讲解,虽然很多文章都不是讲的很深入,但是针对小白入门已经是足够了,希望对小白来说是一个入门,群晖NAS的大佬们勿喷,哪里写的不对的,请随时留言西安SEO优化站长一定在第一时间纠正修改。

西安SEO优化网站资源 8万+

Vue.js前端框架学习全攻略:从入门到实战的进阶之路

少背多练,多思考“为什么”,而非只记“怎么写”。遇到问题时,先尝试通过官方文档和调试工具自行排查,再向社区求助——这个过程本身就是能力提升的关键。从基础指令到大型项目,从Vue 2到Vue 3,Vue.js的生态一直在迭代,但“以开发者为中心”的核心从未改变。只要保持耐心和实战热情,你一定能将Vue.js转化为自己的核心技能,在前端开发的道路上稳步前行。最后,祝正在学习Vue.js课程的你,学有所成,实战顺利!如果有学习中的疑问,欢迎在评论区交流~

c_1023的博客 1087

Win10系统权限深度解析:如何安全地将C盘所有者从TrustedInstaller变更为Administrators

本文深入解析了Win10系统中C盘文件权限管理的核心机制,解释了为何管理员账户(Administrators)默认无法修改由TrustedInstaller保护的系统文件。文章在强调安全风险的前提下,详细提供了通过图形界面和命令行两种方式,将文件或文件夹所有权从TrustedInstaller安全变更为Administrators的实操步骤,并给出了关键的风险预警与权限恢复方法。

weixin_29305313的博客 549

CRMEB小程序订阅消息实战指南:PHP配置与疑难排查

本文提供CRMEB小程序订阅消息的完整实战指南,重点解析PHP环境下的配置流程与常见错误解决方法。文章从订阅消息的核心规则讲起,详细拆解了从微信后台获取模板到CRMEB后台完成字段映射的关键步骤,并提供了从用户授权、缓存清除到服务器日志检查的逐层排查方案,帮助开发者高效打通消息通道,避免常见配置陷阱。

weixin_29022115的博客 320

comfyui-vrgamedevgirl后期套件:LUT调色、胶片颗粒与色彩匹配打造电影感AI视频

AI视频生成之后,往往还差"最后一步"——统一而高级的电影感。comfyui-vrgamedevgirl 是 ComfyUI 的一个自定义节点包,内置了完整的视频后期套件:LUT 调色、胶片颗粒、色彩匹配与 13 项精细 Adjust 参数,让你在 ComfyUI 里就能完成 AI 视频的专业级后期,无需打开任何外部剪辑软件。 comfyui-vrgamedevgirl AI Video Bui

gitblog_00739的博客 926

大模型角色提示词写得再严密,也能被绕过?我用攻击者思维把自己吓了一跳!

很多人以为提示词是“只要写清楚了,模型就能理解”,但实际上——模型并不具备严格的规则意识,它只是在预测下一句话。所以我们必须从“攻防”角度出发,设计更强的防护机制。我这次就是亲身踩坑,用红队思维模拟攻击,才意识到原来提示词注入这么容易中招。你如果也在做 AI 应用、角色系统、提示词驱动的功能,建议你也用类似方式测试一下,不然被绕了都不知道。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1026

【前端每日基础】day36——vue组件的通信方式

在Vue.js中,组件通信是一个重要的概念,它允许组件之间进行数据传递和事件处理。Vue.js提供了多种方式来实现组件之间的通信,适用于不同的场景和需求。Vue.js提供了多种组件通信的方式,从简单的父子组件通信到复杂的跨级组件通信,每种方式都有其适用的场景。它集中式存储和管理应用的所有组件的状态,并以一种规则化的方式保证状态以一种可预测的方式发生变化。子组件可以通过$emit方法向父组件发送事件,父组件通过监听这些事件来接收数据。事件总线是一个中央事件处理器,可以用来在任意组件之间传递事件。

modaoshi51991的博客 2238

微信小程序转发功能异常报错 由于小程序违规分享功能暂时无法使用的解决办法

小程序右上角转发功能被封,不代表你违规了,而可能是你没认证、没备案!很多功能都是“先合规、后开发”,踩坑就晚了,别像我一样绕了三圈才发现问题。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2610

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Vue.js 学习笔记

在前端开发领域,Vue.js 以其轻量级、易上手和高性能的特点,赢得了众多开发者的青睐。作为一名前端小白,我也踏上了学习 Vue.js 的旅程。本文将分享我的学习笔记,涵盖 Vue.js 的基础概念、常用指令、组件化开发、计算属性与侦听器、路由和状态管理等知识点,并附上代码示例,希望能帮助到同样在学习 Vue.js 的你。Vue.js 是一款用于构建用户界面的渐进式 JavaScript 框架。它采用直观的模板语法,降低了学习成本,并通过响应式数据绑定,实现了数据与视图的自动同步更新。

m0_72686196的博客 2767

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Vue 组件通信全解析:从基础到进阶,Vue2 与 Vue3 对比详解

核心作用:子组件向父组件传递数据或事件通知,是子父通信的标准方式。基础通信props和emits是父子组件通信的基石,必须熟练掌握;深层通信简化了多层嵌套组件的通信,配合响应式数据更灵活;直接访问允许父组件直接操作子组件,适合特殊场景(如表单控制);跨组件通信:Pinia 是 Vue3 推荐的状态管理方案,解决无直接关系组件的通信问题;透传处理attrs适合简单的多层属性/事件透传,避免代码冗余。实际开发中,应优先遵循“单向数据流”原则,减少组件间的直接依赖,让数据流向清晰可追踪。

estrusKing的博客 1073

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

彻底告别 MSVCP140.dll 缺失:Visual C++ 运行库一键安装完整指南(2005–2022 全系列)

你双击刚下好的游戏,屏幕弹出:找不到 MSVCP140.dll。先别急着卸载,缺的多半不是游戏,而是 **Visual C++ 运行库**——开源免费的 **VisualCppRedist AIO** 支持一键安装 2005 到 2022 全系列运行库合集,全程不到 5 分钟。 > **一句话结论:** 弹窗提示缺 DLL,不代表软件坏了,只是系统少了某个年代的运行环境。用 VisualCppR

gitblog_00327的博客 646

VueJS-组件通信

前端在处理交互时,经常会遇到一个问题:组件之间如何通信? 下面介绍几种常用的组件通信方式,包括父子组件,兄弟组件,复杂组件下的不同通信方式 现代通信方式: FLUX VUEX FLUX将一个应用分成四个部分:文档 View: 视图层Action(动作):视图层发出的消息(比如mouseClick)Dispatcher(派发器):用来接收Actions、执行回调函数Store

qq_40479190的博客 1082

Vue 2 和 Vue 3 组件通信详解

【代码】Vue 2 和 Vue 3 组件通信详解。

qq_67572731的博客 2729

01 前端必学:Vue2 组件间8种通信方式详解

组件通信是Vue开发的核心知识,本文用生活化比喻+真实案例,带你快速掌握8种通信方式的使用场景和实现方法。

泯泷的博客 1617
上一篇: 前端学习系列(7):前端框架基础之Angular入门
下一篇: 前端学习系列(9):React进阶——深入组件通信与状态管理
DoYangTan
博客等级 码龄5年 1946粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值