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

相关推荐
索木木5 小时前
ShortCut MoE模型分析
前端·html
MXN_小南学前端5 小时前
Vue3 + Spring Boot 工单系统实战:用户反馈和客服处理的完整闭环(提供gitHub仓库地址)
前端·javascript·spring boot·后端·开源·github
轮子大叔5 小时前
CSS基础入门
前端·css
踩着两条虫5 小时前
强强联合!VTJ.PRO 正式接入 DeepSeek V4,AI 编码能力再跃升
前端·vue.js·ai编程
Lily.C5 小时前
DOMPurify 前端富文本 XSS 防护使用指南
前端
一叶渡江5 小时前
深挖 iOS 16 以下 flex column-reverse 滚动失效问题
前端
众创岛6 小时前
回调函数、闭包概念、场景及python实战
前端
得想办法娶到那个女人6 小时前
项目中 TypeScript 类型推导 极简实战总结
前端·javascript·typescript
Beginner x_u6 小时前
前端八股整理(Vue 02)|组件通信、生命周期、v-if 与 v-show
前端·javascript·vue.js
一颗青果6 小时前
Cookie 与 Session 超详细讲解
服务器·前端·github