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 window.event对象详尽解析
Feb 17 Javascript
Iframe thickbox2.0使用的方法
Mar 05 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
Nov 29 Javascript
深入浅析react native es6语法
Dec 09 Javascript
Angularjs中UI Router全攻略
Jan 29 Javascript
Vue Router去掉url中默认的锚点#
Aug 01 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
Sep 20 Javascript
vue通过video.js解决m3u8视频播放格式的方法
Jul 30 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 Javascript
js利用iframe实现选项卡效果
Aug 09 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实现简单的模板引擎功能示例
2017/09/02 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
基于 Bootstrap Datetimepicker 联动
2017/08/03 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python中查看变量内存地址的方法
2015/05/05 Python
python使用range函数计算一组数和的方法
2015/05/07 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
python实现批量图片格式转换
2020/06/16 Python
Python os.access()用法实例
2019/02/18 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
django从后台返回html代码的实例
2020/03/11 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
缓刑人员的思想汇报
2014/01/11 职场文书
区三好学生主要事迹
2014/01/30 职场文书
机械工程师岗位职责
2014/06/16 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
离婚被告代理词
2015/05/23 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书