返回顶部
首页 > 资讯 > 前端开发 > html >react点击事件的写法有哪些
  • 839
分享到

react点击事件的写法有哪些

2024-04-02 19:04:59 839人浏览 安东尼
摘要

这篇文章主要讲解了“React点击事件的写法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react点击事件的写法有哪些”吧!

这篇文章主要讲解了“React点击事件的写法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react点击事件的写法有哪些”吧!

写法:1、用“onClick={this.handleClick}”;2、用“onClick={this.handleClick.bind(this)}”;3、用“{(params)=>this.handleClick(params)}”。

教程操作环境:windows10系统、react17.0.1版、Dell G3电脑。

react点击事件的几种写法是什么

开门见山,先直接给出为一个button添加一个事件的正确写法:

为一个button添加一个onclick事件的正确写法

  • 不传参数

// handleClick用 <箭头函数> 定义
onClick = { this.handleClick }

// handleClick用箭头函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick }></Button>

handleClick这么定义:

handleClick = () => { // do something here};

// handleClick用 (普通函数) 定义
onClick = { this.handleClick.bind(this) }

// handleClick用普通函数定义时,为onClick添加事件应该这么写:<Button onClick = { this.handleClick.bind(this) }></Button>

handleClick这么定义:

handleClick () { // do something here }
  • 传参数

// handleClick用 <箭头函数>/(普通函数) 定义都可以
onClick = { (params) => this.handleClick(params) }

 // handleClick可以是箭头函数,也可以是普通函数<Button onClick = { (params) => this.handleClick(params) }></Button>

接下来分析一下为什么这样写是正确的:

this的指向分析

理解这个问题,带着下面这几句话去理解:

箭头函数,没有自己的this,所以它的this是 : 定义时上下文 的this
普通函数,有自己的this,所以它的this是:执行时上下文的this

先来看第一种写法:

1. onClick = { this.handleClick } + 箭头函数

下面给出的代码为:为一个按钮添加onclick事件(一个完整的jsx)

// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component {
    // 2. 定义handleClick事件
    handleClick = () => {
        console.log(this); //3. this指向examplePage
    }

    render() {
        return (
            <p>
            // 1. 为onClick绑定 handleClick事件处理函数
                <Button onClick = { this.handleClick }>click me</Button>
            </p>
        )
    }}export default examplePage;

点击按钮,打印出指向examplePage的this:

this: examplePage {props: Object, context: {}, refs: {}, updater: Object, state: {}, …}

分析:

  • 当点击Button,调用handleClick事件处理函数,

  • 因为handleClick是一个箭头函数,因此 this是 定义时上下文的this ,

  • handleClick在class examplePage 中定义的 ,

  • 所以this指向examplePage

  • 再看如果把箭头函数改为普通函数的情况:

2. onClick = { this.handleClick.bind(this) } + 普通函数

先来看,如果不用bind(this),console.log(this)会输出什么:

// examplePage.jsximport React from 'react';import { Button } from 'antd';class examplePage extends React.Component {
    // 2. !将箭头函数改为普通函数
    handleClick () {
        console.log(this); // 3. this 为 undefined
    }

    render() {
        return (
            <p>
            // 1. 为onClick绑定 handleClick事件处理函数
                <Button onClick = { this.handleClick }>click me</Button>
            </p>
        )
    }}export default examplePage;

点击按钮,打印出this:

this: undefined

分析:

  • 当点击Button,调用handleClick事件处理函数,

  • 因为handleClick是一个普通函数,因此 this是 执行时上下文的this ,

  • handleClick在页面中点击Button时执行的 ,上下文环境是html的那个页面

  • 所以this是undefined,并不指向examplePage

注:在严格版中,默认的this不再是window,而是undefined
Module code is always strict mode code.
All parts of a ClassDeclaration or ClassExpression are strict mode code.

因此需要用bind来改变this指向,即:

render() {
    return (
        <p>
        // 用bind改变this指向
           <Button onClick = { this.handleClick.bind(this) }>click me</Button>
        </p>
    )}

分析:

  • 当点击Button,调用handleClick事件处理函数,

  • 通过bind()函数,将render函数的this(指向class examplePage),当作一个变量传入handleClick

  • 本来handleClick是一个普通函数, this是 执行时上下文的this(即 undefined),但因为bind(this)传入- - 了指向examplePage的this

  • 所以此时,this是指向examplePage,解决了this为undefined的问题

理解了上面两个,最后一个就很好理解了:

3. onClick = { (params) => this.handleClick(params) } + 普通函数/箭头函数都可

render() {
    return (
        <p>
        // 通过箭头函数传参
           <Button onClick = { (params) => this.handleClick(params) }></Button>
        </p>
    )}

分析:

  • 通过箭头函数传参数,相当于onClick绑定了一个箭头函数

  • 点击Button时,调用(params) => this.handleClick(params)这个箭头函数,因此 this是 定义时上下文的this ,

  • handleClick在class examplePage 中定义的 ,

  • 所以this指向examplePage

  • 按这种思路,只要把onClick的响应事件用箭头函数来写,调用的时候,this指向的都是该组件class,就不会有问题

那么,不传参的时候,就这么写:

<Button onClick = { () => this.handleClick() }></Button>

但这是不可行的,因为react会直接解析()=> this.handleClick(), handleClick会被调用,相当于onClick = “调用handleClick的结果”

所以,不传参数的时候只能这么写:

<Button onClick = { this.handleClick }></Button>

总结
开头的三个问题可以得到回答

  • 什么情况下需要bind(this)?
    答: onClick传入的事件处理函数是普通函数的时候,需要bind(this)来改变指向

  • 为什么要用bind(this)?
    答:如果不用bind(this), this会指向undefined

  • 可以不用bind(this)吗?
    答:用箭头函数 (用箭头函数定义事件处理函数)

//定义handleClick事件
handleClick = () => {
      // do something here
};

//为onClick绑定handleClick事件处理函数
<Button onClick = {this.handleClick}></Button> // 不传参
<Button onClick = {(param) => this.handleClick(param) }></Button> // 传参

感谢各位的阅读,以上就是“react点击事件的写法有哪些”的内容了,经过本文的学习后,相信大家对react点击事件的写法有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: react点击事件的写法有哪些

本文链接: https://lsjlt.com/news/97446.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • react点击事件的写法有哪些
    这篇文章主要讲解了“react点击事件的写法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react点击事件的写法有哪些”吧! ...
    99+
    2024-04-02
  • React中事件的写法有哪些
    本篇内容主要讲解“React中事件的写法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React中事件的写法有哪些”吧!1、普通匿名函数的直接绑定<...
    99+
    2024-04-02
  • jquery绑定点击事件的方法有哪些
    在jQuery中,绑定点击事件的方法有以下几种:1. 使用`click()`方法绑定点击事件:```javascript$('sel...
    99+
    2023-08-08
    jquery
  • React组件的写法有哪些
    这篇文章给大家分享的是有关React组件的写法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。React 专注于 view 层,组件化则是 React 的基础,也是其核心理念...
    99+
    2024-04-02
  • React中connect的有哪些写法
    小编给大家分享一下React中connect的有哪些写法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!connect([mapS...
    99+
    2024-04-02
  • react组件有哪些缺点
    这篇文章将为大家详细讲解有关react组件有哪些缺点,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 react组件的缺点:1、React本身只...
    99+
    2024-04-02
  • Android中点击事件的四种写法详解
    Android中点击事件的四种写法 使用内部类实现点击事件 使用匿名内部类实现点击事件 让MainActivity实现View.OnClickListener接口 通过布局文件中控件的属性 第一种方法:使用内部类基本步骤如下: 新...
    99+
    2023-05-31
    android 点击事件 roi
  • react事件和原生事件有哪些区别
    这篇文章主要介绍了react事件和原生事件有哪些区别的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react事件和原生事件有哪些区别文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • React事件绑定的方式有哪些
    今天小编给大家分享一下React事件绑定的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、是什么在react应用...
    99+
    2023-06-05
  • react有哪些特点
    这篇文章主要讲解了“react有哪些特点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react有哪些特点”吧!react的特点有:1、声明式设计,当数据变动时React能高效更新并渲染合适...
    99+
    2023-07-04
  • jquery焦点事件有哪些
    本教程操作环境:windows7系统、jquery3.6版本、Dell G3电脑。jquery焦点事件有两个:获取焦点focus()和失去焦点blur()。jquery focus()获取焦点事件当元素获得焦点时,发生 focus 事件。当...
    99+
    2023-05-14
    jquery javascript
  • JavaScript中有没有点击事件
    本文将为大家详细介绍“JavaScript中有没有点击事件”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“JavaScript中有没有点击事件”能够给你意想不到的收获,请大家跟...
    99+
    2024-04-02
  • React的优缺点有哪些
    React的优缺点:1、React优点,速度很快、性能好、跨浏览器兼容、代码模块化重用性高、单向数据流、兼容性好;2、React缺点,不适合单独做一个完整的框架,本身只是View。具体内容如下:React:React主要用于构建UI。你可以...
    99+
    2024-04-02
  • React的知识点有哪些
    这篇文章主要介绍了React的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React的知识点有哪些文章都会有所收获,下面我们一起来看看吧。  组件的数据挂载方式,属性(props)props是正常...
    99+
    2023-06-03
  • JavaScript事件的知识点有哪些
    今天小编给大家分享一下JavaScript事件的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • Web的事件知识点有哪些
    本篇内容主要讲解“Web的事件知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Web的事件知识点有哪些”吧!web中的事件事件并不是JavaScript的核心部分,他们是在浏览器的We...
    99+
    2023-06-02
  • oracle事件知识点有哪些
    这篇文章主要讲解了“oracle事件知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle事件知识点有哪些”吧!一、Oracle跟踪文件  ...
    99+
    2024-04-02
  • Golang的特点及写法有哪些
    今天小编给大家分享一下Golang的特点及写法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、Golang的特点及应...
    99+
    2023-07-05
  • react关于事件绑定this的方式有哪些
    小编给大家分享一下react关于事件绑定this的方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在react组件中,每...
    99+
    2024-04-02
  • vue组件的写法有哪些
    这篇文章主要为大家展示了“vue组件的写法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue组件的写法有哪些”这篇文章吧。数据驱动和组件化是vue.js...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作