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()的写法方便传递参数,最推荐用此写法。

相关推荐
持续前行3 分钟前
通过 npm 下载node_modules 某个依赖 ;例如 下载 @rollup/rollup-linux-arm64-gnu
前端·javascript·vue.js
Embrace92427 分钟前
React Native + Realm 离线方案处理
javascript·react native·react.js·realm
chenyingjian37 分钟前
鸿蒙|能力特性-统一文件预览
前端·harmonyos
毛骗导演38 分钟前
OpenClaw 沙箱执行系统深度解析:一条 exec 命令背后的安全长城
前端·架构
天才聪44 分钟前
鸿蒙开发vs前端开发1-父子组件传值
前端
卡尔特斯1 小时前
Android Studio 代理配置指南
android·前端·android studio
李剑一1 小时前
同样做缩略图,为什么别人又快又稳?踩过无数坑后,我总结出前端缩略图实战指南
前端·vue.js
Jolyne_1 小时前
Taro样式重构记录
前端
恋猫de小郭1 小时前
Google 开源大模型 Gemma4 怎么选,本地跑的话需要什么条件?
前端·人工智能·ai编程
文心快码BaiduComate1 小时前
Comate搭载GLM-5.1:长程8H,对齐Opus 4.6
前端·后端·架构