返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue父子组件通信全面详细介绍
  • 177
分享到

Vue父子组件通信全面详细介绍

vue的父子组件通信vue父子组件通信例子 2022-11-13 18:11:50 177人浏览 独家记忆
摘要

目录1.Vue父子组件通信方式2.不同文件间的通信方式1 .父组件vue文件和子组件vue文件2 .父组件jsx文件和子组件vue文件3 .父组件vue文件和子组件jsx文件4 .父

1.Vue父子组件通信方式

父子组件通信方式一般为props和emit组合使用,那么在不同的文件中应该如何使用呢?

|.vue文件和.jsx文件中有什么不同吗?

2.不同文件间的通信方式

1 .父组件vue文件和子组件vue文件

// 父组件 App.vue
<HelloWorld :value="count" @update:value="handleAppValue" />
// 子组件 HelloWorld.vue
// script
const props = defineProps<{ value: number }>();
const emit = defineEmits<{
  (e: "update:value", value: number): void;
}>();
const handleUpdate = () => {
  emit("update:value", props.value + 1);
};
</script>
<template>
  <div @click="handleUpdate">{{ value }}</div>
</template>

2 .父组件jsx文件和子组件vue文件

// 父组件 TsxTest.tsx
// setup内
const handleUpdateValue = (count: number) => {
  value.value = count;
  emit("update:value", value.value);
};
// 注意这里是onUpdate:value
return () => (
  <HelloWorld value={value.value} onUpdate:value={handleUpdateValue} />
);
// 子组件 HelloWorld.vue
// script
const props = defineProps<{ value: number }>();
const emit = defineEmits<{
  (e: "update:value", value: number): void;
}>();
const handleUpdate = () => {
  emit("update:value", props.value + 1);
};
</script>
<template>
  <div @click="handleUpdate">{{ value }}</div>
</template>

3 .父组件vue文件和子组件jsx文件

// 父组件 App.vue
const count = ref(2);
const handleAppValue = (value: number) => {
  count.value = value;
};
<TsxTest :value="count" @update:value="handleAppValue" />
// 子组件 TsxTest.tsx
// script
props: {
  value: {
    type: Number,
    default: 1,
  },
},
emits: ["update:value"],
setup(props, { emit }) {
  const handleUpdateValue = () => {
    emit("update:value", props.value + 1);
  };
  return () => (
    <div onClick={handleUpdateValue}>{props.value}</div>
  );
},

4 .父组件jsx文件和子组件jsx文件

// 父组件 TsxParent
const value = ref(1);
const handleUpdateValue = (count: number) => {
  value.value = count;
};
<TsxTest value={value.value} onUpdate:value={handleUpdateValue} />
// 子组件 TsxTest.tsx
// script
props: {
  value: {
    type: Number,
    default: 1,
  },
},
emits: ["update:value"],
setup(props, { emit }) {
  const handleUpdateValue = () => {
    emit("update:value", props.value + 1);
  };
  return () => (
    <div onClick={handleUpdateValue}>{props.value}</div>
  );
},

3.如何实现

在componentEmits文件里面可以看到

// componentEmits.ts
// rawArgs就是emit('update:value', count)的count值
let args = rawArgs
const isModelListener = event.startsWith('update:')
// 双向绑定的name比如update:value那么就是后面的value值
const modelArg = isModelListener && event.slice(7)
if (modelArg && modelArg in props) {
  const modifiersKey = `${
    modelArg === 'modelValue' ? 'model' : modelArg
  }Modifiers`
  // 是否有modifiersKey比如trim/number
  const { number, trim } = props[modifiersKey] || EMPTY_OBJ
  if (trim) {
    args = rawArgs.map(a => a.trim())
  }
  if (number) {
    args = rawArgs.map(toNumber)
  }
}

为啥modifiersKey会拼接Modifiers字符串呢?

因为在vModel处理时会获取父组件传过来的modifiers并进行处理拼接

// vModel.ts
// 对eventName进行处理,arg不存在则认为是onUpdate:modelValue
const eventName = arg
  ? isStaticExp(arg)
    ? `onUpdate:${arg.content}`
    : createCompoundExpression(['"onUpdate:" + ', arg])
  : `onUpdate:modelValue`
const modifiersKey = arg
  ? isStaticExp(arg)
    ? `${arg.content}Modifiers`
    : createCompoundExpression([arg, ' + "Modifiers"'])
  : `modelModifiers`

然后在进行handler处理

// componentEmits.ts 接上
let handlerName
let handler =
  // toHandlerKey就行处理evnet变成on${capitalize(str)}
  props[(handlerName = toHandlerKey(event))] ||
  // also try camelCase event handler (#2249)
  props[(handlerName = toHandlerKey(camelize(event)))]
// for v-model update:xxx events, also trigger kebab-case equivalent
// for props passed via kebab-case
if (!handler && isModelListener) {
  handler = props[(handlerName = toHandlerKey(hyphenate(event)))]
}
if (handler) {
  // callWithAsyncErrorHandling就是函数执行,然后进行了错误处理
  callWithAsyncErrorHandling(
    handler,
    instance,
    ErrorCodes.COMPONENT_EVENT_HANDLER,
    args
  )
}

简单来说emit函数就是语法糖

<TsxTest value={value.value} onUpdate:value={handleUpdateValue} />
<TsxTest :value="count" @update:value="handleAppValue" />

上面两种方式的处理函数[onUpdate:value/@update:value]都会在emit里面变成这样

emit('update:value', count)
// 执行emit其实就行下面的执行
props.['onUpdate:value'](count)

到此这篇关于Vue父子组件通信全面详细介绍的文章就介绍到这了,更多相关Vue父子组件通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue父子组件通信全面详细介绍

本文链接: https://lsjlt.com/news/170058.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue父子组件通信全面详细介绍
    目录1.Vue父子组件通信方式2.不同文件间的通信方式1 .父组件vue文件和子组件vue文件2 .父组件jsx文件和子组件vue文件3 .父组件vue文件和子组件jsx文件4 .父...
    99+
    2022-11-13
    vue的父子组件通信 vue父子组件通信例子
  • Vue组件通信之父传子与子传父详细讲解
    目录父组件传递给子组件浅谈Props子组件传递给父组件父组件传递给子组件 父组件传递给子组件:通过props属性;子组件传递给父组件:通过$emit触发事件; 这里我们知道,父组件...
    99+
    2022-11-13
    Vue组件通信 Vue组件通信父传子 Vue组件通信子传父
  • Vue组件通信方式(父传子、子传父、兄弟通信)
    目录父组件传到子组件子组件向父组件传值非父子传参 (事件总线)vue 跨页面双向通信同源通信非同源通讯父组件传到子组件 父组件是通过props属性给子组件通信的 数据是单向流动 父&...
    99+
    2024-04-02
  • Vue组件间通信方式全面汇总介绍
    目录一、组件间通信最基本方式-props二、组件间通信-vue自定义事件三、组件间通信-事件总线四、组件间通信-v-model五、组件间通信-sync属性修饰符六、组件间通信-$at...
    99+
    2023-05-16
    Vue通信方式 Vue组件通信方式
  • angular父子组件通信详解
    目录用到的api简单的例子person.ts父组件子组件效果总结用到的api Input - 子组件中定义可接受的属性,可以用来父组件给子组件传递数据 Output - 子组件中定义...
    99+
    2024-04-02
  • Vue子组件与父组件详细解析
    目录一、父组件和子组件二、模板分离写法1、template标签2、text/x-template三、父子组件通信-父传子1、Prop 类型四、父子组件通信子传父1、vm.$emit(...
    99+
    2024-04-02
  • Vue怎么用父组件向子组件通信
    本文小编为大家详细介绍“Vue怎么用父组件向子组件通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么用父组件向子组件通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。props组件实例的作用域是孤立的...
    99+
    2023-07-04
  • 浅析Vue中父子组件间怎么通信(父传子|子传父)
    1、父组件传递给子组件⭐⭐父组件传递给子组件:通过props属性;【相关推荐:vuejs视频教程、web前端开发】子组件传递给父组件:通过$emit触发事件;  这里我们知道,父组件有一些数据需要子组件来进行展示,那我们可以通过props来...
    99+
    2022-11-22
    组件通信 组件 Vue
  • vue3 非父子组件通信详解
    目录第一种方法App.vueHome.vueHomeContent.vue数据的响应式修改响应式Property总结业务场景是,不是父子组件实现通信 文件目录 第一种方法 Ap...
    99+
    2024-04-02
  • React中父子组件通信详解
    目录父组件向子组件通信存在期父组件向子组件通信 在父组件中,为子组件添加属性数据,即可实现父组件向子组件通信。传递的数据可以分成两类 子组件是作为属性来接收这些数据的 第一类就是数据...
    99+
    2024-04-02
  • 父子聊通讯:揭秘 VUE 父子组件通信的那些事儿
    父子组件通信是VUE中非常重要的一个概念,它允许父子组件之间进行数据传递和事件触发。在VUE中,父子组件通信可以通过以下几种方式实现: Props: Props是VUE中实现父子组件通信最常用的方式。它允许父组件将数据传递给子组件。 ...
    99+
    2024-02-07
    文章 VUE 父子组件通信 props $emit ref $children $parent
  • Vue组件通信之父传子与子传父深入探究
    目录为什么要组件拆分组件拆分的流程子组件中为什么要使用defineComponent方法父传子父组件子组件子传父子组件父组件provide和inject方法传递数据的组件子组件孙子组...
    99+
    2022-12-08
    Vue组件通信几种方式 Vue组件通信实现
  • Vue非父子组件之间的通信方式详解
    目录非父子组件的通信1.Provide和Inject1.1基本使用1.2处理响应式数据(了解)2.全局事件总线总结非父子组件的通信 此篇讲解的是, 在学习状态管理之前, 非父子间通信...
    99+
    2024-04-02
  • 如何用Vue实现父子组件通信
    目录一、父子组件的关系构成二、props三、$emit四、$parent五、总结 一、父子组件的关系构成 本篇文章将要总结的是Vue中父子组件之间的通信方式。 那在vue中父子组件之...
    99+
    2024-04-02
  • Vue中父子组件间怎么通信的
    本篇内容主要讲解“Vue中父子组件间怎么通信的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中父子组件间怎么通信的”吧!Vue父子组件什么是父子组件?在一个组件中引入另一个组件,被引入的就...
    99+
    2023-06-21
  • vue父子组件间通信怎么实现
    本篇内容介绍了“vue父子组件间通信怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.父组件传递数据给子组件父组件数据如何传递给子组...
    99+
    2023-07-04
  • Vue中怎么利用父组件向子组件通信
    今天就跟大家聊聊有关Vue中怎么利用父组件向子组件通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。props组件实例的作用域是孤立的。子组件的模板...
    99+
    2024-04-02
  • Vue组件及父子组件通信的示例分析
    这篇文章将为大家详细讲解有关Vue组件及父子组件通信的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是组件?vue中的组件其实就是页面组成的一部分,好比是电脑...
    99+
    2024-04-02
  • 详细解读VUE父子组件的使用
    目录1.递归组件2.组件之间的循环使用二,深层次的问题**1.父传子****2.子传父***3.兄弟关系** 4.子组件复用5.父组件通过ref调用子组件的方法我们对父子组...
    99+
    2023-05-19
    VUE 组件 VUE父子组件
  • Vue中怎么实现非父子组件通信
    这篇文章将为大家详细讲解有关Vue中怎么实现非父子组件通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。组件是Vue核心的一块内容,组件之间的通信也是很基本...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作