React 事件处理

React事件处理需要注意的地方大概整理了一点,留个爪爪,利人利己。

React 元素的事件处理和DOM元素类似,但是又一点语法上的不同。

1.React 事件绑定属性的命名采用驼峰式写法,而不是小写;
2.如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM元素的写法);
3.你不能使用返回 false 的方式阻止默认行为,你必须明确的使用 preventDefaule(构造函数) ;
4.当你使用 ES6 class 语法来定义一个组件的时候,事件处理器会成为类的一个方法;
5.必须谨慎对待JSX回调函数中的this。类的方法默认是不会绑定this的。如果你忘记绑定this。handleClick 并把它传入 onClinck,当你调用这个函数的时候,this的值回事 undefined . 这并不是React 的特殊行为,它是函数如何在 JavaScript 中运行的一部分。通常情况下,如果你没在方法后添加(),你应该为这个方法绑定this;

如果不喜欢使用bind,这里有两种方式可以解决

1.可以使用属性初始化器来正确绑定回调函数;
2.使用回调函数。

import React, { Component } from 'react';
class Role extends Component {
   // 构造函数传参 props
   constructor(props){
       super(props);
       // 当前数据为 默认设置开关为true
       this.state = {isToggleOn:true}
       // 这边绑定是必要的,这样this才能在回调函数中使用
       // 当前点击
       this.handleClick = this.handleClick.bind(this);
   }
   // 点击事件,点击时候取反
   handleClick(){
       this.setState(prevState=>({
           isToggleOn:!prevState.isToggleOn
       }));
   }
 render() {
   return (
       // 绑定点击事件
     <button onClick={this.handleClick}>
     {/* 点击的时候,当前开关如果是开就变为关,如果是关就变为开 */}
         {this.state.isToggleOn ? 'ON':'OFF'}
     </button>
   );
 }
}

export default Role;

import React, { Component } from 'react';

// 使用箭头函数确保‘this’绑定在函数中
class Role extends Component {
    handleClick (){
        console.log(this)
    }

  render() {
    return (
        // 使用 React 的时候,通常不需要使用 addEventListener 为一个已创建的 DOM 元素添加监听器,
        // 仅仅需要在这个元素初始渲染的时候提供一个监听器。
      <button onClick={(e)=> this.handleClick(e)}>
        click me
      </button>
    );
  }
}

export default Role;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • React元素的事件处理和DOM元素的区别 React元素的事件处理和DOM元素相似,但语法上有些不同: Reac...
    宁小姐的慢时光阅读 1,027评论 0 1
  • 处理事件 react事件使用驼峰命名,而不是完全小写。通过JSX我们可以传递一个函数作为事件处理程序。与DOM绑定...
    张延伟阅读 1,579评论 0 0
  • 本笔记基于React官方文档,当前React版本号为15.4.0。 1. 安装 1.1 尝试 开始之前可以先去co...
    Awey阅读 7,803评论 14 128
  • HTML模版 之后出现的React代码嵌套入模版中。 1. Hello world 这段代码将一个一级标题插入到指...
    ryanho84阅读 6,303评论 0 9
  • 今天参加了县里的微课大赛,出乎意料的是我始终没有紧张,无论是从准备还是到上讲台。 我知道这也许是上天给我的机会,让...
    苍穹怡然阅读 145评论 0 0