首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

元素事件和addEventListener()区别

大家好,又见面了,我是你们朋友全栈君。 元素事件和addEventListener()区别 onclick添加事件不能绑定多个事件,后面绑定会覆盖前面的。...而addEventListener能添加多个事件绑定,按顺序执行。 onclick只能冒泡,addEventListener()可以得到捕获or冒泡。...addEventListener 是W3C DOM 规范中提供注册事件监听器方法。...: 事件类型字符串,不使用“on”前缀 – – callback:事件处理程序(回调函数) – – useCapture:可选参数,是否使用事件捕获方式处理事件。...不传递时,默认为false,表示不使用事件捕获(使用事件冒泡),如果需要显示事件捕获,则显示传递true。

1K20

通过 JS 实现简单拖拽功能并且可以特定元素禁止拖拽

前言 关于讲解 JS 拖拽功能文章数不胜数,我确实没有必要大费周章再写一篇重复文章来吸引眼球。本文重点是讲解如何在某些特定元素禁止拖拽。...24px; float: right; padding: 3px; } 演示 Demo JS draggable('#modal', '#modal .modal-header');  我们可以通过第二个参数指定不同拖拽元素...排除特定元素方法 关于如何排除特定元素方法,很多人会推荐阻止冒泡方法,但是我试了很多次,这种方法是不行,因为拖拽事件绑定在了 document 对象。...解决方法就是拖拽开始时添加限制条件,代码如下 ......因为我们排除特定元素同时也要排除它元素。如果使用原生 JS 的话,需要添加获取子元素方法。

4.7K90
您找到你想要的搜索结果了吗?
是的
没有找到

React 进阶 - 事件系统

比如: 给元素绑定事件,不是真正事件处理函数 冒泡 / 捕获阶段绑定事件,也不是冒泡 / 捕获阶段执行 事件处理函数中拿到事件源 e ,也不是真正事件源 e React 为什么要写出一套自己事件系统呢...,对事件标签中事件收集,向 container 注册事件 一次用户交互,事件触发,到事件执行一系列过程 事件合成 React 事件不是绑定在元素,而是统一绑定在顶部容器 v17 之前是绑定在...DOM 元素 然后进行批量更新 合成事件通过 onClick 找到对应处理插件 SimpleEventPlugin ,合成新事件源 e ,里面包含了 preventDefault 和...一直收集到最顶端 app ,形成执行队列,接下来阶段,依次执行队列里面的函数 # React 18 版本 # 老版本问题 老版本事件原理有一个问题就是,捕获阶段和冒泡阶段事件都是模拟,本质都是冒泡阶段执行...新版本顺序:捕获阶段 -> 事件监听 -> 冒泡阶段 # 事件绑定 React 新版事件系统中, createRoot 会一次向外层容器注册完全部事件: // react-dom/client.js

1K10

react是如何实现冒泡

本文作者:IMWeb jerytang 原文出处:IMWeb社区 未经同意,禁止转载 react 自己实现了一套事件冒泡机制,将所有事件都用代理方式绑定到 document。... 如果使用原生方式, el 绑定 blur 事件 input 也绑定 blur 事件,...,那么使用其他事件来监测子元素 change 变化 分别绑定 focusout click keydown beforeactivate 等监控函数 当发现目标元素,比如 input,发生了值变化...最后一个参数为true轻松搞定 巧妙使用 addEventListener 第3个捕获参数,那么首先事件就会在 root 被捕获 然后获取到 e.target 也就是 input元素,然后再通过...react 事件是绑定到 document,所以 e.currentTarget 是 document,e.target 是 input 根据 input,获取向上冒泡路径,即会冒泡元素 collectPaths

1.7K20

React进阶」一文吃透react事件原理

6 onClick冒泡阶段绑定?那么onClickCapture就是事件捕获阶段绑定吗? ?...②真实domclick事件被单独处理,已经被react底层替换成空函数。 ③我们react绑定事件,比如onChange,document,可能有多个事件与之对应。...由于v16React事件是统一绑定在documentReact用独特事件名称比如onClick和onClickCapture,来说明我们给绑定函数到底是冒泡事件阶段,还是捕获事件阶段执行。...① React,diff DOM元素类型fiberprops时候, 如果发现是React合成事件,比如onClick,会按照事件系统逻辑单独处理。...④ 有一点值得注意: 只有上述那几个特殊事件比如 scorll,focus,blur等是事件捕获阶段发生其他都是事件冒泡阶段发生,无论是onClick还是onClickCapture都是发生在冒泡阶段

2.6K31

一文带你梳理React面试题(2023年版本)

React基于浏览器事件机制实现了一套自身事件机制,它符合W3C规范,包括事件触发、事件冒泡、事件捕获事件合成和事件派发等React事件设计动机(作用):底层磨平不同浏览器差异,React实现了统一事件机制...-DOM事件流是怎么工作,一个页面往往会绑定多个事件,页面接收事件顺序叫事件流W3C标准事件传播过程:事件捕获处于目标事件冒泡常用事件处理性能优化手段:事件委托把多个子元素同一类型监听函数合并到父元素...,通过一个函数监听行为叫事件委托我们写React事件是绑定在DOM吗,如果不是绑定在哪里React16事件绑定在documentReact17以后事件绑定在container,ReactDOM.render...(app,container)React事件机制总结如下:事件绑定 事件触发React所有的事件绑定在container(react17以后),而不是绑定在DOM元素(作用:减少内存开销,所有的事件处理都在...container其他节点没有绑定事件React自身实现了一套冒泡机制,不能通过return false阻止冒泡React通过SytheticEvent实现了事件合成图片React实现事件绑定过程

4.1K122

React】786- 探索 React 合成事件

事件捕获 当某个元素触发某个事件(如 onclick ),顶层对象 document 就会发出一个事件流,随着 DOM 树节点向目标元素节点流去,直到到达事件真正发生目标元素。...事件委托/事件代理 简单理解就是将一个响应事件委托到另一个元素。当子节点被点击时,click 事件向上冒泡,父节点捕获事件后,我们判断是否为所需节点,然后进行处理。...小结 小结前面几点区别: 原生事件 React 事件 事件名称命名方式 名称全部小写(onclick, onblur) 名称采用小驼峰(onClick, onBlur事件处理函数语法 字符串 函数...通过上面流程,我们可以理解: React 所有事件都挂载 document 对象; 当真实 DOM 元素触发事件,会冒泡到 document 对象后,再处理 React 事件; 所以会先执行原生事件...因为所有元素事件将无法冒泡到document通过前面介绍两者事件执行顺序来看,所有的 React 事件都将无法被注册。

1.7K40

探索 React 合成事件

事件捕获 当某个元素触发某个事件(如 onclick ),顶层对象 document 就会发出一个事件流,随着 DOM 树节点向目标元素节点流去,直到到达事件真正发生目标元素。...事件委托/事件代理 简单理解就是将一个响应事件委托到另一个元素。 当子节点被点击时,click 事件向上冒泡,父节点捕获事件后,我们判断是否为所需节点,然后进行处理。...小结 小结前面几点区别: 原生事件 React 事件 事件名称命名方式 名称全部小写 (onclick, onblur) 名称采用小驼峰 (onClick, onBlur事件处理函数语法 字符串...通过上面流程,我们可以理解: React 所有事件都挂载 document 对象; 当真实 DOM 元素触发事件,会冒泡到 document 对象后,再处理 React 事件; 所以会先执行原生事件...因为所有元素事件将无法冒泡到document通过前面介绍两者事件执行顺序来看,所有的 React 事件都将无法被注册。

4K22

5、React组件事件详解

2、事件自动绑定 JavaScript中创建回调函数时,一般要将方法绑定到特定实例,以保证this正确性; 2.React中,每个事件处理回调函数都会自动绑定到组件实例(使用ES6语法创建例外...如果需要使用浏览器原生事件,可以通过合成事件nativeEvent属性获取 React合成事件原理 使用JSX,React中绑定事件: ...这些焦点事件工作 React DOM 中所有的元素 ,不仅是表单元素。...,而不是普通冒泡,并且没有捕获阶段;只有鼠标指针穿过被选元素时,才会触发。...、其他事件 onToggle React中使用原生事件 由于原生事件需要绑定在真实DOM,所以一般是 componentDidMount阶段/ref函数执行阶段进行绑定操作,componentWillUnmount

3.7K10

40道ReactJS 面试问题及答案

React 中,事件处理程序被指定为 JSX 元素驼峰式命名属性,例如 Click me。...处理事件 HTML 中,事件处理程序通常是内联函数或全局函数。 React 中,事件处理程序通常定义为组件类方法。...事件冒泡和捕获: HTML 和 React 都支持事件冒泡和捕获,其中事件从最里面的元素传播到最外面的元素(冒泡),反之亦然(捕获)。...受控组件:表单数据由 React 组件(而不是 DOM)处理,方法是将输入值存储状态中,并在输入更改时更新状态。 输入值由 React 状态控制,输入更改通过事件处理程序进行处理,从而更新状态。...您可以通过使用 JSX 中 autoFocus 属性或通过以编程方式将输入元素集中功能组件中 useEffect 挂钩或类组件中 componentDidMount 生命周期方法中,将输入元素集中页面加载

16010

React合成事件

React合成事件 React自己实现了一套高效事件注册、存储、分发和重用逻辑,DOM事件体系基础做了很大改进,减少了内存消耗,简化了事件逻辑,并最大程度地解决了IE等浏览器不兼容问题。...对象nativeEvent属性获得原生Event对象引用,React事件有以下几个特点: React注册事件最终会绑定在document这个DOM,而不是React组件对应DOM,通过这种方式减少内存开销...,所有的事件都绑定在document其他节点没有绑定事件,实际就是事件委托。...,注意以下事件处理函数冒泡阶段被触发,如需注册捕获阶段事件处理函数,则应为事件名添加Capture,例如处理捕获阶段点击事件请使用onClickCapture,而不是onClick。...,React17不再往document事件委托,而是挂到DOM容器,目录结构都有了很大更改,我们还是依照React16,首先来看一下事件处理流程。

2.2K10

JavaScript笔记(16)之事件高级

onclick btn.onclick = function() {} 特点:注册事件唯一性 同一个元素同一个事件只能设置一个处理函数,最后注册处理函数将会覆盖前面注册处理函数(比如说写两次btn.onclick...事件发生时会在元素节点之间按照特定顺序传播,这个传播过程即DOM事件流....第三个参数是true,表示事件捕获阶段调用事件处理程序;如果是false,(不写默认就是false),表示事件冒泡阶段调用事件处理程序....我们试一下就能理解了 实际开发中我们很少使用事件捕获,我们更关注事件冒泡 有些事件是没有冒泡,比如onblur/onfocus/onmouseenter/onmouseleave 事件冒泡有时候会带来麻烦...,比如判断用户按下了哪个键 事件对象也有兼容性问题,IE678通过window.event 兼容性写法: e || window.event 官方解释: event对象代表事件状态,比如键盘按键,

46410

React】学习笔记(一)——React入门、面向组件编程、函数柯里化

构造器只new实例时调用,render每次状态更新和初始化时候调用,只要我们通过合法方式(this.setState API)更新组件状态React会自己帮我们调用render方法更新组件...非受控组件底层实现时是在其内部维护了自己状态state,这样表现出用户输入任何值都能反应到元素。...React中,可变状态通常保存在组件状态属性中,并且只能使用 setState() 进行更新,而呈现表单React组件也控制着在后续用户输入时该表单中发生情况,以这种由React控制输入表单元素而改变其值方式...比如,给表单元素input绑定一个onChange事件,当input状态发生变化时就会触发onChange事件,从而更新组件state。...受控组件更新state流程 1、 可以通过初始state中设置表单默认值 2、每当表单值发生变化时,调用onChange事件处理器 3、事件处理器通过事件对象event拿到改变后状态,并更新组件

5K30

React核心原理与虚拟DOM

React DOM 会将元素和它元素与它们之前状态进行比较,并只会进行必要更新来使 DOM 达到预期状态。...React实战视频讲解:进入学习State&生命周期setState(updater,[callback])React中,如果是由React引发事件处理(比如通过onClick引发事件处理),调用...正常React绑定事件:异步更新通过addEventListener绑定事件:同步更新通过setTimeoutt处理点击事件:同步更新使用 compoentDidUpdate 或 setState...react事件和原生事件最好不要混用。原生事件中如果执行了stopPropagation方法,则会导致其他react事件失效。因为所有元素事件将无法冒泡到document。...,并将所有的事件都代理到document,自己模拟了事件冒泡和捕获过程,并且进行统一事件分发。

1.9K30

前端模块化开发--React框架(一): 入门和面向组件编程

虚拟DOM相关数据, react会转换为真实DOM变化而更新界面 javascript //声明babel //创建虚拟dom元素..., 值是对象(可以包含多个数据) 2)组件被称为”状态机”, 通过更新组件state来更新对应页面显示(重新渲染组件) javascript ... this.msgInput = input}/> b.回调函数组件初始化渲染完或卸载时自动调用 2)组件中可以通过this.msgInput...来得到对应真实DOM元素 3)作用: 通过ref获取组件内容特定标签对象, 进行读取其相关数据事件处理 1)通过onXxx属性指定组件事件处理函数(注意大小写) Code a.React使用是自定义...(合成)事件, 而不是使用原生DOM事件 b.React事件通过事件委托方式处理(委托给组件最外层元素) 2)通过event.target得到发生事件DOM元素对象例子 javascript

2K20

百度前端必会react面试题汇总

(1)不要在循环,条件或嵌套函数中调用Hook,必须始终 React函数顶层使用Hook这是因为React需要利用调用顺序来正确更新相应状态,以及调用相应钩子函数。...,只有第一次生效,后期需要更新状态,必须通过useEffectTableDeail是一个公共组件,调用它父组件里面,我们通过set改变columns值,以为传递给TableDeail columns...当然可以通过 setState 第二个参数中 callback 拿到更新结果setState 批量更新优化也是建立异步(合成事件、钩子函数)之上原生事件和 setTimeout 中不会批量更新... React Diff 算法中 React 会借助元素 Key 值来判断该元素是新近创建还是被移动而来元素,从而减少不必要元素重渲染此外,React 还需要借助 Key 值来判断元素与本地状态关联关系...对 React 和 Vue 理解,它们异同相似之处:都将注意力集中保持核心库,而将其他功能如路由和全局状态管理交给相关库都有自己构建工具,能让你得到一个根据最佳实践设置项目模板。

1.6K10

React学习记录

因为 this.props 和 this.state 可能会异步更新,所以你不要依赖他们值来更新下一个状态。... Activate Lasers React 中另一个不同点是你不能通过返回 false 方式阻止默认行为...一个好经验法则是: map() 方法中元素需要设置 key 属性。 数组元素中使用 key 在其兄弟节点之间应该是独一无二。然而,它们不需要是全局唯一。...如果你组件中需要使用 key 属性值,请用其他属性名显式传递这个值 13、状态提升 通常,多个组件需要反映相同变化数据,这时我们建议将共享状态提升到最近共同父组件中去。...错误边界渲染期间、生命周期方法和整个组件树构造函数中捕获错误。

1.5K20

React深入】React事件机制

事件注册 ? 组件装载 / 更新通过 lastProps、 nextProps判断是否新增、删除事件分别调用事件注册、卸载方法。...将 callback根据事件类型,元素唯一标识 key存储 listenerBank中。...由上面执行机制我们可以得出: React自己实现了一套事件机制,自己模拟了事件冒泡和捕获过程,采用了事件代理,批量更新等方法,并且抹平了各个浏览器兼容性问题。...最后执行真正在 document挂载事件 react事件和原生事件可以混用吗?...react事件和原生事件最好不要混用。 原生事件中如果执行了 stopPropagation方法,则会导致其他 react事件失效。因为所有元素事件将无法冒泡到 document

1.2K40
领券