React.js事件处理的三种写法

更新日期: 2019-05-01 阅读: 2.9k 标签: 写法

前言

reactjs中事件处理,与dom元素处理类似,但也有一些不同的语法

React 事件名称使用驼峰命名,而不是全小写命名。
使用JSX,可以将函数作为事件处理程序传递,而不是字符串。

es6的class语法规定,类的方法内部,如果含有this,它默认指向类的实例。但是,单独使用该方法,可能报错,this指向不明确。为了解决这个问题,react提出了3中解决方法。


1. 在回调函数中使用箭头函数

在onClick的时候,使用箭头函数。这个语法确保this 绑定在handleClick中。

优势:很容易让人看懂。
缺点:在每次render时候,都会产生一个匿名函数。如果此组件作为一个子组件,那么父组件render的时候,子组件也可能会重新渲染,消耗性能。
在线预览

class ToggleBtn extends React.Component {
  constructor() {
    super()
    this.state = {
      isToggleOn: true
    }
  }
  handleClick(e) {
    this.setState({
      isToggleOn: !this.state.isToggleOn
    })
  }
  render() {
    return (
      <div>
        <button onClick={(e) => this.handleClick(e)}>{this.state.isToggleOn ? 'ON' : 'OFF'}</button>
      </div>
    )
  }
}


2. 在构造器中绑定this

优势:通用。
缺点:繁琐,每次都得手动绑定this。
在线预览

class ToggleBtn extends React.Component {
  constructor() {
    super()
    this.state = {
      isToggleOn: true
    }
    // 这个bind方法是必须的,以确保`this`可以在回调函数handleClick中使用
    this.handleClick = this.handleClick.bind(this)
  }  
  handleClick(e) {
    this.setState({
      isToggleOn: !this.state.isToggleOn
    })
  }
  render() {
    return (
      <div>
        <button onClick={this.handleClick}>weiqinl-{this.state.isToggleOn ? 'ON' : 'OFF'}</button>
      </div>
    )
  }
}


3. 使用类字段语法

优点:简单方便。
缺点:ES7功能。实验性属性,可能不兼容,需要babel处理。
在线预览

class ToggleBtn extends React.Component {
  constructor() {
    super()
    this.state = {
      isToggleOn: true
    }
  }
  // 这个语法确保`this` 绑定在handleClick中
    handleClick = (e) => {
    this.setState({
      isToggleOn: !this.state.isToggleOn
    })
  }
  render() {
    return (
      <div>
        <button onClick={this.handleClick}>weiqinl-{this.state.isToggleOn ? 'ON' : 'OFF'}</button>
      </div>
    )
  }
}


事件参数的传递。

使用箭头函数和方法原型属性的bind方法,两种方式传递参数的写法。

  1. 使用e代表React event,
  2. 在箭头函数中,默认是作为第二个参数的。
  3. 在bind方法时候,是自动作为它的参数可以使用的。
<button onClick={(e) => this.deleteRow(id, e) }>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>


总结

这几种方式,与类中this的绑定问题,解决方式类似。
尽量使用方法2和方法3。方法1如果将事件传递给子组件,可能会有重新渲染的耗能问题。


原文地址:https://www.cnblogs.com/weiqinl/p/10798437.html 

 

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/article/detial/3167

JS的不常见写法

声明函数并立即执行,返回全局变量,变量的值是一个对象。和声明对象异曲同工。这种算是带变量名的对象声明,不需要new 对象。top全局的浏览器对象,代表窗口

javascript实用写法汇总

原理是~是一个叫做按位非的操作,会返回数值的反码,两次取反就是原数。|为位运算符,两个位只要有一个为1,那么结果都为1,否则就为0。>>运算符执行有符号右移位运算。都是二进制操作。

switch 有四样写法你知道么

我所知道的 JavaScript 的 switch 语句只有一种写法。但要说到对分支的处理,写法可就多了去了。if 分支写法可以算一种,switch 分支写法可以算第二种,第三种是使用策略模式,如果要把条件运算符也算上的话,嗯,刚好四种。

JS的神奇写法有哪些?一篇由new bing生成的文章

JavaScript是一种非常灵活和强大的编程语言,它有很多神奇的写法和骚操作,让开发者可以用更简洁和优雅的方式实现各种功能。本文将介绍一些JS的神奇写法,包括:

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!