react事件浅谈

简介: 1.之前写过2篇简单的事件相关文章事件基础 -this2.事件传参3.这篇文章来详细的说下react中的事件

0. 前言


1.之前写过2篇简单的事件相关文章事件基础 -this

2.事件传参

3.这篇文章来详细的说下react中的事件


1.重点 this 箭头函数


因为这个React事件 this经常容易出错,所以注意

创建者: 自己写事件函数的时候 用箭头函数


clickHandler = (){}

调用者: 自己调用事件函数的时候用箭头函数


<button onClick={()=>{
    this.clickHandler()
}}> 点我呀 </button>



2. 是什么 what


React中的事件 叫合成事件

1.因为react底层使用了事件委托的形式对真实DOM事件进行了封装,使合成事件具有更好的浏览器兼容性性能


3. 原理


1.首先明确react的事件肯定还是基于原生JS的事件,所以一个事件的3个阶段也会有 1.事件捕获阶段 2.目标阶段 3.事件冒泡阶段,这里只简单说下,具体的不在讲解

2.react中事件在具体的DOM节点上被触发后,最终都会冒泡到 document上,再由document上绑定的统一事件处理程序将事件分发到具体的组件实例


4. why 为啥react要重新搞一个 合成事件呢


1.其实还是原生JS的问题 兼容性性能 对说你呢IEo(╯□╰)o

2.这个思想也类似jQ,抹平不同浏览器的差异,作为开发者,不关心浏览器差异,只专注于开发就行

3.开发者使用的是暴露出来的 统一的,稳定的,而且与原生事件相同的事件接口

4.获取真实的DOM 需要通过ref API来获取

5.获取原生的事件对象 可以通过e.nativeEvent


console.log("原生",e.nativeEvent);



5. 事件语法-基础



function test(e) {
            console.log("1-1-1-1",e)
        }
        ReactDOM.render((
            <div>
                <div onClick={test}> 事件</div>  
            </div>
        ), app)


注意

1.React事件绑定属性的命名采用驼峰式写法,而不是小写

事件名采用 驼峰 onClick ,使用全部小写会报错

  1. 绑定的函数不能加() ,因为加()表示调用,那么绑定就是这个函数的结果了 ,传入的是函数 不是字符串 不需要加""
  2. 默认有一个参数,这个参数是 react的合成参数,可以自己打印查看


6. 函数传参



function test2(id, e) {
            console.log("2-2-2-2", id)
            console.log("事件:", e)
            console.log("事件target:", e.target)
        }
        var shopId = "1234567"
        ReactDOM.render((
            <div>
                <div onClick={(event) => {
                   event.persist()
                    test2(shopId , event)
                }}
                    id="test"
                   > 事件传参</div>
            </div>
        ), app)


1.必须通过箭头函数周转下 才能传参

2.参数顺序可以调换

3.persist 持久化 因为合成事件 是react封装的,点击完就释放掉了 ,不保存信息,所以打印事件对象的时候属性值都是空的null,加了persist就会保存下来信息


7. dataset-传值


1.dataset 也是目前很常用的传参手段

2.dataset写标签属性的时候 注意不要使用 驼峰


function test2(num, e) {
            console.log("2-2-2-2", num)
            console.log("事件:", e)
            console.log("事件-target:", e.target.dataset.shopid)
        }
        var shopId = "1234567"
        ReactDOM.render((
            <div>
                <div onClick={test}> 事件</div>
                <div onClick={(event) => {
                    test2(100, event)
                }}
                    id="test"
                    data-shopid={shopId}> 事件传参</div>
            </div>
        ), app)




相关文章
|
2月前
|
移动开发 前端开发 JavaScript
React 表单与事件
10月更文挑战第10天
41 1
|
1月前
|
前端开发 JavaScript 开发者
React 事件处理机制详解
【10月更文挑战第23天】本文介绍了 React 的事件处理机制,包括事件绑定、事件对象、常见问题及解决方案。通过基础概念和代码示例,详细讲解了如何处理 `this` 绑定、性能优化、阻止默认行为和事件委托等问题,帮助开发者编写高效、可维护的 React 应用程序。
95 4
|
2月前
|
前端开发 JavaScript IDE
React 事件处理
10月更文挑战第8天
23 1
|
2月前
|
前端开发 JavaScript
一文详解React事件中this指向,面试必备
一文详解React事件中this指向,面试必备
47 0
|
3月前
|
前端开发 JavaScript
react学习(19)事件处理
react学习(19)事件处理
|
3月前
|
前端开发 JavaScript
React的事件与原生事件的执行顺序?
React的事件与原生事件的执行顺序?
|
4月前
|
前端开发 JavaScript Java
React 中的合成事件
【8月更文挑战第30天】
58 6
|
4月前
|
前端开发 JavaScript
React 中的事件是什么?
【8月更文挑战第30天】
80 5
|
4月前
|
存储 前端开发 JavaScript
React中的事件处理(八)
【8月更文挑战第15天】React中的事件处理
36 1
|
4月前
|
前端开发 JavaScript 开发者
如何在 React 中处理事件?
【8月更文挑战第31天】
48 0