当前位置: 首页 > news >正文

vue3组件通信实例

文章目录

  • 父组件向子组件传递数据
  • 父组件访问修改子组件数据、调用子组件方法
  • 子组件访问修改父组件数据、方法
  • 兄弟组件传值
  • Pinia通信

<script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。相比于普通的 <script> 语法,它具有更多优势:

  • 更少的样板内容,更简洁的代码。
  • 能够使用纯 TypeScript 声明 props 和自定义事件。
  • 更好的运行时性能 (其模板会被编译成同一作用域内的渲染函数,避免了渲染上下文代理对象)。
  • 更好的 IDE 类型推导性能 (减少了语言服务器从代码中抽取类型的工作)。

文件目录结构

在这里插入图片描述

父组件向子组件传递数据

props方式

父组件🌻 🌻🌻


    <childA :isPropData="state.isPropData" />
    <childB />
 
	 const state = reactive({
	    isPropData:'来自父组件数据',
	 });
 

子组件A🌻 🌻🌻


	import { reactive,defineProps, onBeforeMount, onMounted } from 'vue';
	onMounted(() => {});
	//接收
	const props = defineProps({
	  isPropData: {
	    type: String,
	    default: () => '',
	  },
	})

在这里插入图片描述
provide/inject方式

父组件🌻 🌻🌻


import { provide } from 'vue';

// 向子组件传递数据
provide('fromParent', '123456')

子组件A🌻 🌻🌻


import { inject } from 'vue';

onMounted(() => {
  console.log(inject('fromParent')); //123456
});

父组件访问修改子组件数据、调用子组件方法

父组件🌻 🌻🌻


	<childA ref="isA" :isPropData="state.isPropData" />
	
	//获取到子组件
	const isA = ref(null);
	
	onMounted(() => {
	    //修改A组件数据
	    isA.value.state.data = 123
	    //访问A组件数据
	    console.log(isA.value.state.data);
	    //调用A组件方法
	    console.log(isA.value.afn());
	    
	});
	

子组件A🌻 🌻🌻

	
	import { reactive,defineProps,defineExpose, onBeforeMount, onMounted } from 'vue';
	
	const state = reactive({
	  data:'我是a组件数据'
	});
	
	//a组件方法
	const afn=()=>{
	  console.log('a组件方法执行');
	}
	
	//暴露私有数据与方法
	defineExpose({
	  state,
	  afn
	})

在这里插入图片描述

子组件访问修改父组件数据、方法

子组件A🌻 🌻🌻

defineEmits方式


  	<div @click="getData"> A点击 </div>
	import { defineEmits, onBeforeMount, onMounted } from 'vue';
	
	//定义触发的方法
	const emit = defineEmits(["changeData"]);
	
	const getData = ()=>{
	  emit("changeData", '传给父组件数据');
	}
	

父组件🌻 🌻🌻


    <childA ref="isA" @changeData="doFn" :isPropData="state.isPropData" />

	const doFn = ()=>{
 	   console.log('访问、修改父组件数据');
   		 //TODO
	}
	

在这里插入图片描述

子组件修改父组件数据 update方式

子组件A🌻 🌻🌻


     <div @click="titleChange">
        改变title
      </div>
      
	const emit = defineEmits(["changeData",'update:title']);

	const titleChange = ()=>{
	  emit('update:title', 'title改变啦!')
	}
	

父组件🌻 🌻🌻


 <childA :title="title" @update:title="state.title = $event"  />

 const state = reactive({
    title:'组件通信'
 });

 //触发titleChange 事件 title 更改 为'title改变啦!'

兄弟组件传值

子组件B向A组件传值 & 数据操作

安装 mitt 组件通信工具
npm install mitt@3.0.0 -S
mitt 适用所有父子、兄弟等所有关系的组件通信

main.js


	let app = createApp(App)
	app.config.globalProperties.$EventBus = new mitt();

子组件A🌻 🌻🌻

	
	  import { getCurrentInstance } from 'vue';
	  const { proxy } = getCurrentInstance();
	  
	  //先解绑避免重复绑定
	  proxy.$EventBus.off('setTH');
	  
	  //监听
	  proxy.$EventBus.on('setTH', () => {
	    //TODO
	  });
	  

子组件B🌻 🌻🌻

	
	  import { getCurrentInstance } from 'vue';
	  const { proxy } = getCurrentInstance();
	  
	  //监听
	  proxy.$EventBus.$emit('setTH', 'B组件传给A组件数据');
	  

Pinia通信

文章链接💥 vue3Pinia状态管理

在这里插入图片描述

相关文章:

  • LeetCode刷题第4周小结
  • python自动化测试——unittest二次开发之自定义测试用例执行器和测试结果记录器(二)
  • fastapi访问/docs接口,页面空白
  • 《Python 计算机视觉编程》学习笔记(二)
  • 【Vue】MVVM模型,vue中的data、methods属性
  • 经典面试题-如何将字符串转化为整型
  • 【Python练习】task-08 综合练习
  • 利用pe系统重装电脑
  • HW面试题
  • python自动化小技巧08——从剪贴板读取数据(快速复制粘贴)
  • 【Linux】之Jumpserver堡垒机的部署/搭建
  • 学习信奥要不要先学python
  • Yolov7训练自己的数据集(超详细)
  • 常见网络知识面试题总结
  • 当前行情下,真的还能“跳进”进大厂吗?
  • [deviceone开发]-do_Webview的基本示例
  • js如何打印object对象
  • Mocha测试初探
  • October CMS - 快速入门 9 Images And Galleries
  • Promise面试题2实现异步串行执行
  • react-native 安卓真机环境搭建
  • vue总结
  • Yii源码解读-服务定位器(Service Locator)
  • 初识 beanstalkd
  • 仿天猫超市收藏抛物线动画工具库
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 近期前端发展计划
  • 马上搞懂 GeoJSON
  • 判断客户端类型,Android,iOS,PC
  • 微服务核心架构梳理
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #pragma 指令
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)windows配置JDK环境
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (七)Knockout 创建自定义绑定
  • (转)Mysql的优化设置
  • .NET Core 2.1路线图
  • .NET 设计一套高性能的弱事件机制
  • .net 无限分类
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @DataRedisTest测试redis从未如此丝滑
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [20181219]script使用小技巧.txt
  • [Android] Implementation vs API dependency
  • [Android]使用Android打包Unity工程
  • [autojs]autojs开关按钮的简单使用
  • [C#]winform部署yolov5-onnx模型
  • [delphi]保证程序只运行一个实例
  • [Django 0-1] Core.Checks 模块