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)




相关文章
|
1月前
|
前端开发 JavaScript
第九章 React中的事件处理
第九章 React中的事件处理
|
1月前
|
前端开发 开发者 UED
【第33期】一文学会用React事件
【第33期】一文学会用React事件
27 0
|
30天前
|
前端开发 调度 开发者
React的事件处理机制
【5月更文挑战第29天】React的事件处理机制
23 2
|
30天前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理按钮的点击行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理按钮的点击行为?
28 1
|
30天前
|
前端开发 JavaScript
在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
【5月更文挑战第28天】在React中,如何通过事件处理函数来管理输入框的获取和失去焦点行为?
28 1
|
1月前
|
存储 前端开发 JavaScript
【亮剑】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
|
1月前
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
|
1月前
|
前端开发 JavaScript 开发者
如何在React中监听键盘事件
如何在React中监听键盘事件
66 0
|
1月前
|
前端开发 JavaScript Java
react事件机制
react事件机制
48 0