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

苏州做网站专业的公司东营百度推广公司

苏州做网站专业的公司,东营百度推广公司,网站开发项目推荐,零基础学什么技术好文章目录 前言🔧 使用方式简述⚙️ 源码角度解析 emit一、组件实例初始化时的 emit二、emit 函数的定义三、关键点说明 🧠 总结流程图(简化)🔍 结合运行时举个实际例子📌 总结 前言 Vue 3 中 emit 是组件之…

文章目录

  • 前言
    • 🔧 使用方式简述
    • ⚙️ 源码角度解析 `emit`
      • 一、组件实例初始化时的 `emit`
      • 二、emit 函数的定义
      • 三、关键点说明
    • 🧠 总结流程图(简化)
    • 🔍 结合运行时举个实际例子
    • 📌 总结


前言

Vue 3 中 emit 是组件之间通信的重要机制,通常用于 子组件向父组件发送事件。下面我们结合源码,深入理解 emit 的工作原理。


🔧 使用方式简述

子组件中:

defineProps(['msg'])
const emit = defineEmits(['change'])function triggerChange() {emit('change', 'new value')
}

父组件中:

<MyComponent @change="onChange" />

⚙️ 源码角度解析 emit

Vue 3 中的 emit 是在 组件实例 (ComponentInternalInstance) 的上下文中定义的函数。它的实现主要在 Vue 3 的核心包 @vue/runtime-core 中。

一、组件实例初始化时的 emit

位于:packages/runtime-core/src/component.ts

export function createComponentInstance(...) {const instance: ComponentInternalInstance = {...emit: (...args) => {emit(instance, ...args)}}...
}

这里 emit 是一个闭包,它绑定了当前组件实例,最终调用了 emit(instance, ...args) 这个方法。


二、emit 函数的定义

位于:packages/runtime-core/src/componentEmits.ts

export function emit(instance: ComponentInternalInstance,event: string,...rawArgs: unknown[]
) {const props = instance.vnode.props || EMPTY_OBJlet handlerName = toHandlerKey(event) // 比如 'change' => 'onChange'let handler = props[handlerName]if (!handler && event.toLowerCase() !== event) {handler = props[handlerName.toLowerCase()]}if (handler) {callWithAsyncErrorHandling(handler, instance, ErrorCodes.COMPONENT_EVENT_HANDLER, args)}
}

三、关键点说明

步骤内容
toHandlerKey('change')会变成 onChange,这是 Vue 事件绑定的内部规则
props.onChange从组件的 vnode.props 上查找对应的事件处理函数
callWithAsyncErrorHandling调用函数时,带有错误处理机制(防止 UI 崩溃)

🧠 总结流程图(简化)

emit('change', value)↓
组件内部的 emit 实例函数↓
调用 @vue/runtime-core 的 emit(instance, 'change', value)↓
查找 props 中的 onChange↓
找到后执行 onChange(value)

🔍 结合运行时举个实际例子

const emit = defineEmits(['submit'])function onClick() {emit('submit', { name: 'Vue' })
}

编译后模板中,父组件绑定的是 onSubmit

<Child @submit="handleSubmit" />

Vue 会在创建 VNode 时把 @submit="handleSubmit" 转成:

props: {onSubmit: handleSubmit
}

然后通过上面提到的 emit 源码逻辑找到 onSubmit 并执行。


📌 总结

  • Vue 3 中的 emit 是通过组件实例绑定的 emit 函数实现的;
  • 实际调用的是 runtime-core 中的 emit(instance, eventName, ...args)
  • emit 会根据事件名(如 change)生成 onChange 并在 props 中查找是否有对应函数;
  • callWithAsyncErrorHandling 确保事件处理函数执行时出错不会影响整个应用。

http://www.dtcms.com/wzjs/327187.html

相关文章:

  • 网站开发研究论文大数据营销策略有哪些
  • dw怎么用div css做网站如何建立个人网址
  • wordpress人力资源模板天津网络优化推广公司
  • 深圳网站建设技术关键词排名优化价格
  • 沈阳凯鸿网站建设惠州百度推广优化排名
  • 网站建设主机的功能什么是网站推广策略
  • 用dw做旅游的网站的设计企业营销管理
  • DW做网站入门步骤教学关键词小说
  • 政府信息公开和网站建设工作总结如何进行网站推广?网站推广的基本手段有哪些
  • 新网站怎么做论坛推广常州网站优化
  • dedecms婚纱摄影网站模板福建seo搜索引擎优化
  • 做网站运营还是翻译网络推广发帖网站
  • 用jsp做的网站代码关键词优化是怎样收费的
  • 北京网站设计公司hlh成都柚米科技15网络营销名词解释答案
  • 建设银行广东分行网站百度seo网站
  • 做购物网站最开始没人怎么办seo工具包括
  • 最专业网站建设百度搜索关键词
  • 做外贸 网站公司的公关
  • 西安网站建设公司云网关键字挖掘爱站网
  • 网站备案最快多久海阳seo排名
  • 加盟网站建设案例欣赏新闻投稿平台有哪些
  • 做网站用的动漫资料企业网站的推广形式有
  • 工程公司招聘推广关键词优化
  • wordpress可以放视频吗北京网络seo
  • 代做备案网站长春网站seo
  • 定制化网站建设公司挖掘关键词的工具
  • 企业网站开发开题报告江苏网站开发
  • 在哪个网站做民营企业申报百度seo推广方案
  • 制作视频的软件哪个好苏州优化seo
  • 盐城网站建设多少钱快速排名服务平台