在使用ES6类的React组件时,您必须遇到这种现象,必须显式绑定类函数,然后将其传递给诸如onClick。例如,采用以下示例。

import React from 'react';class MyComponent extends React.Component {constructor(props) {super(props);this.state = {clicked: false};this.btnClick = this.btnClick.bind(this);}btnClick() {this.setState({clicked: true})}render() {return(<div><ul><li onClick={this.btnClick}>Hello World</li></ul></div>);}
}

如您在上面的示例中看到的那样,为了使btnClick工作正常,我们需要在构造函数中明确地“绑定”该方法。如果我们没有这样做,JavaScript将无法this在该btnClick方法中识别。这是因为在JavaScript中,默认情况下未绑定类方法。因此,在使用绑定方法后bind(),它将创建一个新的绑定函数,这是一个包装原始函数对象的奇异函数对象(来自ECMAScript 2015的术语)。这将提供this对回调函数的访问。在我们的情况下为btnClick

使用公共类字段语法

基本上,公共类字段语法是Babel提供的实验功能。在这里,您可以使用类字段正确绑定回调。这是上面的示例使用此语法的样子。

import React from 'react';class MyComponent extends React.Component {state = {clicked: false}btnClick = () => {this.setState({clicked: true})}render() {return(<div><ul><li onClick={this.btnClick}>Hello World</li></ul></div>);}
}

正如您在上面看到的,我们不再需要定义类的构造函数,因为class字段将实例化该类实例的属性值。除此之外,由于我们现在使用JavaScript的数组函数语法,我们不再需要显式绑定该函数,因为this箭头函数内的作用域指向父作用域。

在回调中使用箭头功能

import React from 'react';class MyComponent extends React.Component {constructor(props) {super(props);this.state = {clicked: false};}btnClick() {this.setState({clicked: true})}render() {return(<div><ul><li onClick={(e) => this.btnClick(e)}>Hello World</li></ul></div>);}
}

但是,这种方法有一个缺点。因此,基本上,每次MyComponent渲染都会创建一个不同的回调。如果将此回调作为对较低组件的支持而传递,则可能会出现问题,这些组件可能会进行额外的重新渲染,这可能会降低渲染组件时的性能。

文章参考来源:React中的回调中自动绑定ES6类函数

react回调函数_React中的回调中自动绑定ES6类函数相关推荐

  1. 【Android FFMPEG 开发】OpenSLES 播放音频 ( 创建引擎 | 输出混音设置 | 配置输入输出 | 创建播放器 | 获取播放/队列接口 | 回调函数 | 开始播放 | 激活回调 )

    文章目录 I . FFMPEG 播放视频流程 II . OpenSLES 播放音频流程 III . OpenSLES 播放参考 Google 官方示例 IV . OpenSL ES 播放代码 ( 详细 ...

  2. 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )

    文章目录 I . AAudio 音频流 采样 缓冲 播放 的连续机制 II . AAudio 音频流 数据回调函数 函数指针类型定义 III . AAudio 音频流 数据回调函数 实现 IV . A ...

  3. 回调函数、Java接口回调 总结

    回调函数 谈到回调,我们得先从回调函数说起,什么叫回调函数呢? 回调函数是什么? 百度百科的解释:回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针 ...

  4. 回调函数举例ajax,通过回调函数的理解来进一步理解ajax及其注意的用法

    一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...

  5. 阻塞式回调函数和延迟式回调函数

    首先,有三种函数: 起始函数:大致可以等同于主函数 中间函数:中间函数把回调函数作为参数传递执行 回调函数:一个有独立功能的函数 怎么理解: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里 ...

  6. java jna 回调函数_JNA中级篇 回调函数详解

    JNI 技术是双向的,既可以从Java 代码中调用原生函数,也可以从原生函数中直接创建 Java 虚拟机,并调用Java 代码.但是在原生函数中调用java代码要写大量C代码,这对大多数java程序员 ...

  7. 回调函数 相当于线程_Java中的回调机制,这篇给你整的明明白白的

    作者:带妳心菲 cnblogs.com/prayjourney/p/9667835.html 调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: ...

  8. 查看回调函数执行在那个线程中的方法

    在回调函数中加入: messagebox.show(system.threading.thread.currentthread.managedthreadid.tostring());

  9. js中的回调函数,什么是回调函数?

    一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为函数实际上是一种对象,即是内置对象 ...

最新文章

  1. linux 系统打造man中文帮助手册图解
  2. Java虚拟机new和newarray相关指令学习
  3. Codeforces 1338 题解
  4. 关于贝叶斯的一个小小的总结
  5. 帆软助力惠科集团产值提升1%以上,带来上亿元数据价值
  6. shell如何自动输入密码
  7. linux 创建LVM磁盘
  8. python可以做什么工作-python都能干什么用
  9. iOS 让UIButton根据文字内容自动计算宽高
  10. java exe 反编译工具_windows下java反编译工具
  11. php实现身份证号码获取归属地地址的实例
  12. wireshark出现rst的原因_多次RST以及不同场景下的RST报文的差异
  13. 旅游网站首页——html
  14. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合
  15. 质谱和蛋白质组学领域简述
  16. Python基础语法(一)——变量定义和运算符的使用
  17. cesium加载气象数据
  18. Android 11.0 12.0系统默认开启wifi
  19. 矩阵理论的发展史简介
  20. 平均查找长度之二分查找 -【Java】

热门文章

  1. 编写高性能 Web 应用程序的10个技巧
  2. 盘点提高程序员技术的5个免费编程网站,你知道几个?
  3. 极简 响应式 html5,HTML5----响应式(自适应)网页设计
  4. 送书 | 推荐一个可能是最全的Venn图一站式绘制工具
  5. plc维修入门与故障处理实例_电气控制基础+PLC编程入门+工程应用实例
  6. 简单英文题 16 Maximum Sum Not Exceeding K(python)
  7. 好用的重装系统前使用的windows系统软件名称导出备份工具
  8. STM32H743+CubeMX-QSPI读写外部FLASH(W25Q128JVSQ)
  9. 【ES6(2015)】RegExp
  10. python读取txt文件每一行存为列表,从txt文件中读取一定数量的行,并以python方式转换为list...