React基础教程(五):事件处理

事件处理

1、绑定事件

1.1、绑定方式1

js 复制代码
<Button size={"large"} type={"primary"} onClick={ ()=>{
                    console.log("Click1")
                } }>add1</Button>

1.2、绑定方式2

js 复制代码
<Button size={"large"} type={"primary"} onClick={ this.handlerClick2 }>add2</Button>

handlerClick2(){
    console.log("Click2")
}

1.3、绑定方式3

js 复制代码
<Button size={"large"} type={"primary"} onClick={ this.handlerClick3 }>add3</Button>

handlerClick3 = ()=>{
    console.log("Click3")
}

1.4、绑定方式4 (最为推荐此写法)

js 复制代码
<Button size={"large"} type={"primary"} onClick={ ()=>{
                    this.handlerClick4() // 比较推荐
                } }>add4</Button>
                
handlerClick4 = ()=>{
     console.log("Click4")
 }

1.5 完整代码

js 复制代码
import React, {Component} from "react";
import { Button, Input } from 'antd';

import './css/App.css'

export default class App extends Component {
    render() {
        return (
            <div style={{marginTop:10}}>
                <Input style={{width:300}} size={"large"}  />
                <Button size={"large"} type={"primary"} onClick={ ()=>{
                    console.log("Click1")
                } }>add1</Button>

                <Button size={"large"} type={"primary"} onClick={ this.handlerClick2 }>add2</Button>

                <Button size={"large"} type={"primary"} onClick={ this.handlerClick3 }>add3</Button>

                <Button size={"large"} type={"primary"} onClick={ ()=>{
                    this.handlerClick4() // 比较推荐
                } }>add4</Button>

            </div>
        )
    }

    handlerClick2(){
        console.log("Click2")
    }

    handlerClick3 = ()=>{
        console.log("Click3")
    }

    handlerClick4 = ()=>{
        console.log("Click4")
    }
}

2、事件handler的写法

一般推荐handlerClick4()的写法,也会方便传参数。

js 复制代码
import React, {Component} from "react";
import { Button, Input } from 'antd';

import './css/App.css'

export default class App extends Component {

    a = 35;
    render() {
        return (
            <div style={{marginTop:10}}>
                <Input style={{width:300}} size={"large"}  />
                <Button size={"large"} type={"primary"} onClick={ ()=>{
                    console.log("我能不能访问到 a= ", this.a)
                } }>add1</Button>&nbsp;

                {/*不推荐*/}
                <Button style={{backgroundColor:'#e37318',border:"none"}} size={"large"} type={"primary"} onClick={ this.handlerClick2.bind(this) }>add2-不推荐</Button>&nbsp;

                {/*比较推荐*/}
                <Button size={"large"} type={"primary"} onClick={ this.handlerClick3 }>add3-推荐</Button>&nbsp;

                {/*非常推荐*/}
                <Button style={{backgroundColor:'#2ba471', border:"none"}} size={"large"} type={"primary"} onClick={ ()=>{
                    this.handlerClick4() // 非常推荐,传参数
                } }>add4-推荐-传参</Button>

            </div>
        )
    }

    /*
    bind:改变this,手动执行函数
    call:改变this,自动执行函数
    apply:改变this,自动执行函数
     */

    // 不推荐这种写法
    handlerClick2(){
        console.log(this); // undefined
        console.log("Click2", this.a); // 报错
    }

    // 推荐写法,传参数就不太方便了
    handlerClick3 = ()=>{
        console.log("Click3", this.a) // 35。箭头函数
    }

    handlerClick4 = ()=>{
        console.log("Click4", this.a) // 35.箭头函数
    }


}

注意:

如果调用handlerClick2的时候this.handlerClick2.bind(this)这里不加 .bind(this),那么这里的 this 就无法获取,就是 undefined,调用 this.a 就会报错。

handlerClick3handlerClick4都是采用箭头函数的写法,可以正常获取到this

handlerClick4()的写法方便传递参数,最推荐用此写法。

相关推荐
benbenAItalk5 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
2601_962885726 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
西瓜太郎12346 小时前
Claude Code、Codex CLI、Gemini CLI 能否共用一枚 Key?先看协议选择矩阵
前端·api 网关·claude code·gemini cli·codex cli
陈随易8 小时前
在Finch用了62亿词元,我认为这是新一代Agent工具之神
前端·人工智能·后端
水域安全老周8 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
传奇开心果编程9 小时前
【Xilem基础语法学与练】第7课:Xilem与Masonry底层构建技术解析
学习·rust·前端框架
计算机魔术师9 小时前
Anthropic CEO突然喊踩刹车,OpenAI罕见力挺:AI这辆车不能只踩油门了
前端
wing989 小时前
从codex转战workbuddy使用一周的感受
前端·人工智能·后端
Highcharts.js9 小时前
常见报错排雷指南2:导出失败的官方解法
javascript·react.js·ecmascript·highcharts·可视化图表·导出模块失败·导出服务
EatFan9 小时前
Java接入支付宝 JSAPI 支付保姆教程(二):流程讲解与前后端代码讲解
前端·spring boot·后端·微信小程序·小程序·uni-app