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

相关推荐
用户21496515898758 分钟前
从零搭建uniapp环境-记录
前端
努力写代码的熊大2 小时前
stack、queue与priority_queue的用法解析与模拟实现
java·前端·javascript
im_AMBER2 小时前
React 06
前端·javascript·笔记·学习·react.js·前端框架
wyzqhhhh2 小时前
前端常见的设计模式
前端·设计模式
IT_陈寒2 小时前
React 19重磅前瞻:10个性能优化技巧让你少写30%的useEffect代码
前端·人工智能·后端
今天没有盐3 小时前
💕CSS 基础入门指南💕:选择器与文本样式
前端·html·响应式设计
云枫晖4 小时前
Webpack系列-Entry入口
前端·webpack
mustfeng4 小时前
VCS & Verdi 2023安装
java·服务器·前端
Mintopia4 小时前
🌐 数据合规框架下的 WebAIGC 训练数据处理技术规范
前端·javascript·aigc
骥龙4 小时前
2.6、Web漏洞挖掘实战(下):XSS、文件上传与逻辑漏洞深度解析
前端·xss