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 相关文章推荐
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
自己编写的类似JS的trim方法
Oct 09 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
javascript:json数据的页面绑定示例代码
Jan 26 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
最常见和最有用的字符串相关的方法详解
Feb 06 Javascript
基于Vue制作组织架构树组件
Dec 06 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
从零搭一个自用的前端脚手架的方法步骤
Sep 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
mysql 搜索之简单应用
2007/04/27 PHP
PHP版自动生成文章摘要
2008/07/23 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
Vue.js标签页组件使用方法详解
2019/10/19 Javascript
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
讲解python参数和作用域的使用
2013/11/01 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
python实现数独算法实例
2015/06/09 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python 图像平移和旋转的实例
2019/01/10 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
Django model class Meta原理解析
2020/11/14 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
行政助理岗位职责
2013/11/10 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
小组合作学习反思
2014/02/18 职场文书
司机职责范本
2014/03/08 职场文书
商务日语专业自荐信
2014/04/17 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
工资证明格式模板
2015/06/12 职场文书
朋友离别感言
2015/08/04 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
2019入党申请书格式
2019/06/25 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS
在 Python 中利用 Pool 进行多线程
2022/04/24 Python