React 前端框架4

六、React 中的事件处理

(一)绑定事件的方式

在 React 中,事件绑定和传统的 HTML 中的事件绑定有一些不同,它采用了驼峰命名法来命名事件名称,并且事件绑定的属性值是一个函数。例如,在 HTML 中绑定点击事件可能是 <button onclick="handleClick()">点击我</button>,而在 React 中则是 <button onClick={() => handleClick()}>点击我</button>(这里假设 handleClick 是在组件内部定义的一个函数),或者更常见的是将函数先绑定到组件实例上(主要针对类组件),比如:

import React, { Component } from 'react';

class ButtonComponent extends Component {
  constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    console.log('按钮被点击了');
  }

  render() {
    return (
      <button onClick={this.handleClick}>点击我</button>
    );
  }
}

export default ButtonComponent;

在类组件中,因为类的方法默认情况下 this 的指向问题,需要在 constructor 中通过 bind 方法将事件处理函数的 this 绑定到组件实例上,这样才能在事件处理函数中正确地访问到组件的属性和 state 等数据。

(二)事件参数传递

有时候我们需要在事件处理函数中传递额外的参数,常见的做法有两种:

  • 使用箭头函数包裹

    import React, { Component } from 'react';

    class ParameterPassingComponent extends Component {
    handleClick(name) {
    console.log(你好, ${name}!);
    }

    render() {
      return (
        <div>
          <button onClick={() => this.handleClick('小明')}>向小明打招呼</button>
          <button onClick={() => this.handleClick('小红')}>向小红打招呼</button>
        </div>
      );
    }
    

    }

    export default ParameterPassingComponent;

这里通过箭头函数包裹的方式,在调用 this.handleClick 时传递了不同的参数进去。

import React, { Component } from 'react';

class ParameterPassingComponent extends Component {
  handleClick(name) {
    console.log(`你好, ${name}!`);
  }

  render() {
    return (
      <div>
        <button onClick={this.handleClick.bind(this, '小明')}>向小明打招呼</button>
        <button onClick={this.handleClick.bind(this, '小红')}>向小红打招呼</button>
      </div>
    );
  }
}

export default ParameterPassingComponent;

使用 bind 方法除了能绑定 this 之外,还可以同时传递其他参数,达到类似的效果。

相关推荐
cnsxjean2 小时前
Vue教程|搭建vue项目|Vue-CLI2.x 模板脚手架
javascript·vue.js·ui·前端框架·npm
小小优化师 anny2 小时前
JS +CSS @keyframes fadeInUp 来定义载入动画
javascript·css·css3
每一天,每一步3 小时前
react antd不在form表单中提交表单数据,而是点查询按钮时才将form表单数据和其他查询条件一起触发一次查询,避免重复触发请求
前端·javascript·react.js
花之亡灵4 小时前
(笔记)vue3引入Element-plus
前端·javascript·vue.js
神秘代码行者5 小时前
Node.js JWT认证教程
javascript·node.js
不做超级小白5 小时前
深入理解 Axios 拦截器的执行链机制
开发语言·前端·javascript
以对_6 小时前
【el-table】表格后端排序
前端·javascript·vue.js
北城笑笑6 小时前
Vue 90 ,Element 13 ,Vue + Element UI 中 el-switch 使用小细节解析,避免入坑(获取后端的数据类型自动转变)
前端·javascript·vue.js·elementui
前端Hardy6 小时前
HTML&CSS 奇幻森林:小熊的甜蜜蛋糕派对大冒险
前端·javascript·css·html
CH0407086 小时前
Javascript中DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)
开发语言·javascript·ecmascript