react 组件之事件 event

简介: 事件和组件的属性,状态state 一样,都是组件的一个属性,按照之前React对组件的约定,由于事件本质上是一个属性,因此也需要使用小驼峰命名法

含义


  • 在vue中,事件是使用@来进行绑定的,但是react中的事件不是通过这样来绑定,react的事件和原生的事件名称是一样的,只是采用了小驼峰命名法
  • 事件和组件的属性,状态state 一样,都是组件的一个属性,按照之前React对组件的约定,由于事件本质上是一个属性,因此也需要使用小驼峰命名法


使用方式


使用关键字 on 在ts 中就自动会提示react的默认事件


20210218155713558.png


直接绑定一个箭头函数


样例


import React, { Component } from 'react'
export default class TestEvent extends Component {
  render() {
    return (
      <div>
        <button onClick={ () => {
          console.log(this);
        }}>请点击</button>
      </div>
    )
  }
}


结果


20210218163046701.png


绑定一个函数


import React, { Component } from 'react'
export default class TestEvent extends Component {
  handle(){
    console.log(this);
  }
  render() {
    return (
      <div>
        <button onClick={this.handle}>请点击</button> // 这里绑定了一个函数
      </div>
    )
  }
}


结果


20210218164841843.png


注意:如果没有特殊处理,在事件处理函数中,this指向undefined


为啥不经过处理,this 会指向undefined?


个人推测原因:


  • react 中如果这个属性中绑定的是props中的一个属性函数,那么这个 this 指向哪里?


解决事件this 绑定问题


方法一: 直接在事件后面使用一个箭头函数


如上面的使用列子


缺陷: 如果函数里面的内容太多,导致组件维护起来,在视觉上有点难受,毕竟jsx 和 js 没有分离


方法二:事件箭头函数返回一个普通函数


20210218165735434.png


结果


20210218165826951.png


理解上也是没有问题,但是在代码书写上,每一次都要写一个箭头函数,有点烦


方法三:使用bind 来进行绑定


20210218170400321.png


结果


20210218170438292.png


在这里,可能有的朋友要问,为啥 apply 和 call 不行,这里简单解释一下, call 和 apply 执行函数结果中来改变 this 的指向,call 传递一个一个的参数,apply 传递的第二个参数是一个参数数组,如下:


20210218170645703.png


而bind 是返回函数的拷贝,并拥有指定的this值和初始参数。


方法四:在构造函数中进行绑定


20210218171057618.png


结果


2021021817130747.png


这种方式比上面的bind会好一点,因为bind 每一次指向,都会克隆一个新的函数,而构造函数的方式,会在函数的属性上和原型上都存在一份:


20210218171847109.png


方法五: 使用esnext 的语法


20210218172132844.png


20210218172203140.png


个人推荐使用这个用法,有的朋友可能会说,esnext 怎么能用了,我们在使用构建化工具中,会使用babel 进行转译哦!

相关文章
|
4月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
42 0
|
1天前
|
存储 前端开发 JavaScript
【亮剑】如何处理 React 中的 onScroll 事件?
【4月更文挑战第30天】在React中,处理`onScroll`事件可实现复杂功能如无限滚动和视差效果。类组件和函数组件都能使用`onScroll`,通过`componentDidMount`和`componentWillUnmount`或`useEffect`添加和移除事件监听器。性能优化需注意节流、防抖、虚拟滚动、避免同步计算和及时移除监听器。实战案例展示了如何用Intersection Observer和`onScroll`实现无限滚动列表,当最后一项进入视口时加载更多内容。合理利用滚动事件能提升用户体验,同时要注意性能优化。
|
4天前
|
JavaScript 前端开发 开发者
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
深入比较Input、Change和Blur事件:Vue与React中的行为差异解析
|
29天前
|
前端开发 JavaScript 开发者
如何在React中监听键盘事件
如何在React中监听键盘事件
35 0
|
3月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
17 1
|
3月前
|
前端开发 JavaScript Java
react事件机制
react事件机制
39 0
|
3月前
|
前端开发 应用服务中间件 数据库
react服务端组件
react服务端组件
21 0
|
3月前
|
前端开发 JavaScript
快速上手React:从概述到组件与事件处理
快速上手React:从概述到组件与事件处理
|
4月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
76 1
|
4月前
|
资源调度 前端开发 JavaScript
React组件
React组件
42 0