React学习之事件绑定的几种方法对比


Posted in Javascript onSeptember 24, 2017

前言

本文主要给大家介绍了关于React事件绑定的几种方法对比的相关呢荣,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

React事件绑定

由于类的方法默认不会绑定this,因此在调用的时候如果忘记绑定,this的值将会是undefined。

通常如果不是直接调用,应该为方法绑定this。绑定方式有以下几种:

1. 在构造函数中使用bind绑定this

class Button extends React.Component {
constructor(props) {
 super(props);
 this.handleClick = this.handleClick.bind(this);
 }
 handleClick(){
 console.log('this is:', this);
 }
 render() {
 return (
  <button onClick={this.handleClick}>
  Click me
  </button>
 );
 }
}

2. 在调用的时候使用bind绑定this

class Button extends React.Component {
 handleClick(){
 console.log('this is:', this);
 }
 render() {
 return (
  <button onClick={this.handleClick.bind(this)}>
  Click me
  </button>
 );
 }
}

3. 在调用的时候使用箭头函数绑定this

class Button extends React.Component {
 handleClick(){
 console.log('this is:', this);
 }
 render() {
 return (
  <button onClick={()=>this.handleClick()}>
  Click me
  </button>
 );
 }
}

4. 使用属性初始化器语法绑定this(实验性)

class Button extends React.Component {
 handleClick=()=>{
 console.log('this is:', this);
 }
 render() {
 return (
  <button onClick={this.handleClick}>
  Click me
  </button>
 );
 }
}

比较

方式2和方式3都是在调用的时候再绑定this。

  • 优点:写法比较简单,当组件中没有state的时候就不需要添加类构造函数来绑定this
  • 缺点:每一次调用的时候都会生成一个新的方法实例,因此对性能有影响,并且当这个函数作为属性值传入低阶组件的时候,这些组件可能会进行额外的重新渲染,因为每一次都是新的方法实例作为的新的属性传递。

方式1在类构造函数中绑定this,调用的时候不需要再绑定

  • 优点:只会生成一个方法实例,并且绑定一次之后如果多次用到这个方法也不需要再绑定。
  • 缺点:即使不用到state,也需要添加类构造函数来绑定this,代码量多一点。。。

方式4:利用属性初始化语法,将方法初始化为箭头函数,因此在创建函数的时候就绑定了this。

  • 优点:创建方法就绑定this,不需要在类构造函数中绑定,调用的时候不需要再作绑定。结合了方式1、方式2、方式3的优点
  • 缺点:目前仍然是实验性语法,需要用babel转译

总结

方式1是官方推荐的绑定方式,也是性能最好的方式。方式2和方式3会有性能影响并且当方法作为属性传递给子组件的时候会引起重渲问题。方式4目前属于实验性语法,但是是最好的绑定方式,需要结合bable转译

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
Oct 08 Javascript
jQuery常用且重要方法汇总
Jul 13 Javascript
Angularjs过滤器使用详解
May 25 Javascript
12306 刷票脚本及稳固刷票脚本(防挂)
Jan 04 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
创建简单的node服务器实例(分享)
Jun 23 Javascript
关于webpack代码拆分的解析
Jul 20 Javascript
vue左右侧联动滚动的实现代码
Jun 06 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
Oct 31 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 Javascript
一文让你彻底搞清楚javascript中的require、import与export
Sep 24 #Javascript
通过源码分析Vue的双向数据绑定详解
Sep 24 #Javascript
JS实现手写parseInt的方法示例
Sep 24 #Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 #Javascript
详解Web使用webpack构建前端项目
Sep 23 #Javascript
vue webuploader 文件上传组件开发
Sep 23 #Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 #jQuery
You might like
PHP 中的一些经验积累
2006/10/09 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php获取apk包信息的方法
2014/08/15 PHP
PHP查询快递信息的方法
2015/03/07 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
php简单图像创建入门实例
2015/06/10 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
jQuery实现可以扩展的日历
2020/12/01 jQuery
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
SQL语言面试题
2013/08/27 面试题
大学生党员承诺书
2014/05/20 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书