目录
- 从点击输入框开始
- 扩展
- 点击输入框引起多个事件
- 为什么react中的input设置value后成为受控组件?
- 为什么合成事件属性有时无法访问?
- react如何模拟事件的阻止冒泡、阻止默认行为?
- 注释
react合成事件指的是react用js模拟了一个Dom事件流。(fiber树模拟Dom树结构) 合成事件的事件流在fiber树中发生捕获和冒泡。

从点击输入框开始
当你点击input输入框,react在根节点(注1)监听到focus事件(注2)(注3)。
如何从原生事件找到对应的虚拟Dom?
此时,react得到的信息只有原生事件对象(nativeEvent)。react通过nativeEvent对应的Dom(eventTarget),沿着Dom树向上找到距离该eventTarget最近的被react管理的Dom节点(注4)(注5),并获得对应的fiber A。
接着通过事件插件(注6),创建合成事件(注7)A。合成事件A被react视为模拟事件流中的事件源,fiber A被react视为事件目标。
合成事件流?
从fiber A出发向上(直到顶层fiber HostComponent为止)收集所有的host类型的fiber。 然后将收集到的fiber数组,从后向前(捕获),再从前向后(冒泡)遍历。每次遍历,会收集(注8)当前遍历项fiber节点的绑定的focus事件。之后(事件插件完成后,即合成事件生成好了)会按照收集的顺序执行foucs回调。 react就是这样模拟了事件流。
扩展
点击输入框引起多个事件
除了focus外,也触发了其他的事件--click等。react在根节点对不同类型的事件进行了监听,每监听到一种事件就会派发一次,多种类型的事件,会派发多次。 点击输入框,会先后触发focus和click。当focus事件的派发完后,就会派发click事件。 每次某个事件派发结束,会处理待处理的同步任务队列(flushSyncCallBackQueue)。
意料之外的render?
在NoMode模式下,多次派发事件且每个事件都改变了状态(如调用setState),则对应组件会被render多次。 在本例中,点击input输入框,如果给input绑定了focus事件和click事件并且事件回调都调用setState,input将会render两次。
为什么react中的input设置value后成为受控组件?
react中,在input设置了value属性的条件下,无论在输入框中输入什么,输入框的值都不会改变。除非你改变了input组件的state。 react在处理完模拟事件流后,会调用方法将一些意外的效果重置。 例如该场景,在input中输入了一个值,input输入框会出现你输入的值,但马上input的值会被对应的fiber的value属性更新(finishEventHander 重置受控组件)。 如果没有给input设置value则会忽略。
为什么合成事件属性有时无法访问?
因为react在事件流(捕获到冒泡)完后就将合成事件对象释放(SyntheticEvent.prototype.destructor 将合成事件对象的属性重置)。
react如何模拟事件的阻止冒泡、阻止默认行为?
react按照事件流顺序执行回调,在执行前会检查当前合成事件对象是否处于阻止冒泡的状态,如果是,则终止事件流。 react的合成事件对象原型对原生函数进行增强。对原生事件方法的阻止冒泡、阻止默认行为进行了封装(内部也调用原生事件的方法)。
注释
注1:根节点,在 react-v16 为 document ,在 react-v17 为挂载容器Dom
注2:focus事件并不是冒泡事件,react对非冒泡事件在捕获阶段监听
注3:根节点对所有事件进行了监听,除了特别例外submit、reset、invalid和媒体事件等
注4:react将fiber树挂载到Dom树上时,每个宿主(host)类型fiber节点与Dom节点一一对应,并链接
注5:向上查找是因为可能子Dom节点并不是被react管理的,如第三库滚动插件等
注6:为了模拟Dom事件,react进行的补充
注7:react内部一个构造函数的实例,合成事件的部分属性来源于nativeEvent。合成事件与fiber关联
注8:收集而不是执行。因为react针对某一类型事件的做了批处理
以上就是React合成事件详解的详细内容,更多关于React合成事件的资料请关注其它相关文章!
相关推荐:
Chat免费,让沟通无界限,尽享智能对话时代,ai没办法置顶
ChatGPT无法加载?检查您的网络设置并尝试重启,轻松解决常见问题!,ai招生广告设计
SEO元素-提升网站排名的核心要素,推广分成网站有哪些
SEO考核:如何通过精准的SEO优化提升网站排名与流量,茶艺营销推广方案怎么写
优化公司:助力企业腾飞的秘密武器,微信营销推广价格多少
SEO快速提升SEO排名的有效策略:让你的网页飞跃搜索引擎,ai调色食物
seo要懂些什么软件,seo常用软件 ,ai写作网站网址大全
SEO搜索关键词是什么意思?全方位解析关键词优化的核心要素,lol ai图片
ChatGPT打不开实时问题解决方案:让你的AI助手始终在线,psd 转ai
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
ChatGPT点不了?背后的真相与解决方法,ai.520523
SEO中权重是什么意思?让你迅速网站排名的核心秘密!,长颈鹿智能AI点读机
“关键词指白”:揭秘如何通过精准关键词优化实现流量暴增,全面分析网站seo
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
AI代写文章:高效创作的新风尚
seo营销到底是什么,seo算什么营销 ,ai里面新建
SEO知道:让你的网站在搜索引擎中脱颖而出,水安建设集团网站
SEO部:开启数字化营销新纪元的幕后英雄,株洲营销推广是什么公司
ChatGPT的诞生,预示着人工智能大规模应用的时代已经来临,ai此生不渝
ChatGPT怎么打不开了?解决办法,轻松恢复畅通无阻!,ai订酒店ai对话
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
SEM做得好可以取代SEO吗?浅析两者的异同与未来趋势,王道ai
SEO表述:如何通过精准优化让你的内容脱颖而出,江阴网站建设怎么样啊
seo网站页面优化包括什么,seo页面优化技术 ,no ai写作
ChatGPT无法加载?检查网络并尝试重启,助您快速恢复畅通体验,burj ai
seo软件是什么职位,seo用的是什么软件 ,ai感知树
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
怎么用AI写出高质量科普文章?揭秘新时代创作利器!
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
ChatGPT无法加载?检查您的网络设置并尝试重启ChatGPT,助您畅享无障碍智能对话体验,ai记录人
OpenAI无法验证支付方式?解决方案与常见问题解析,你好月光ai
智能AI写作生成:如何借助人工智能提升创作效率与质量
SEO招标:如何通过专业SEO服务助力企业脱颖而出,牡丹江关键词排名怎么样
GPT-3.5可以免费使用吗?AI未来的无限可能,ai烧猪
SEO和品牌营销:如何通过搜索引擎优化打造品牌影响力,建邺seo软件
未来智能:AI智能人工软件引领数字化变革
SEO优化与SEM广告:提升品牌曝光与流量的双重利器,ai接回头
内容创作新时代:自动生成文章的AI如何改变写作生态
GPT-3.5免费吗?揭秘AI智能助手的未来与收费模式,ai 美美
seo追词是什么,seo词条 ,52580609AI
ChatGPT显示无法加载网站是怎么回事?解决方法!,glow将军ai
GPT怎么收费?揭秘AI技术的定价与价值,ai报考高考
Goanno跨级借鉴:推动创新与提升效率的秘密武器,崇明区智能ai艾灸费用
AI人工智能生成文章:开启写作新时代
SEO优化顾问:让您的网站脱颖而出的秘密武器,ai ps 群
AI免费试用不需要登录:体验智能科技的魅力,轻松开启未来,华为ai身材
seo高手有什么条件,seo难上手吗 ,指南ai写作电力创新
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏