今天给大家分享一下react绑定事件的四种方法,也许会有不准确的地方,欢迎指点出来,大家一起进步~

首先要先了解,在js中class的方法默认不会绑定this,默认情况下是undefined,所以就需要我们手动的去绑定this,这样才能在回调函数中使用到this。

第一种方法:在构造器中绑定this(这也是官方推荐的方法)

export default class Test extends Component {constructor(props){super(props)this.handleClick = this.handleClick.bind(this)}handleClick(){console.log('点击了',this)}render(){return (<div onClick={ this.handleClick }>click btn</div>)}
}

优点就是这种方法只会生成一个方法实例,并且绑定一次以后可以多次使用。

第二种方法:属性初始化器语法(class fields)绑定回调函数

export default class Test extends Component {handleClick=()=>{console.log('点击了',this)}render(){return (<div onClick={ this.handleClick }>click btn</div>)}
}

这种方法的好处就不用说了,首先在代码上就精简了很多。但是官方文档中说这个是"实验性"的语法,所以还是需要babel转义的。不过Create React App默认是启用这种语法的,所以还是可以放心使用的。

第三种方法:在调用的时候绑定this

export default class Test extends Component {handleClick(){console.log('点击了',this)}render(){return (<div onClick={ this.handleClick.bind(this) }>click btn</div>)}
}

第四种方法:使用箭头函数绑定this

export default class Test extends Component {handleClick(){console.log('点击了',this)}render(){return (<div onClick={ ()=> this.handleClick() }>click btn</div>)}
}

第二、三、四种方法的好处就是在不需要state的时候,不用额外的多写一个constructor构造函数。

但是第三、四种方法的问题在于每次渲染这个组件的时候,都会创建不同的回调函数,这样会对性能产生影响,而且如果和子组件通讯时作为props传入子组件,这些组件可能会进行额外的重新渲染,因为每一次都是新的方法实例作为新的属性在传递。

所以如果考虑性能问题的话,还是应该避免第三种和第四种的写法。官方推荐的还是第一种和第二种方法来绑定this。

React绑定事件的四种方法相关推荐

  1. svg鼠标响应事件的四种方法(其中两种可支持火狐)

    svg鼠标响应事件的四种方法 鼠标响应事件的四种方法,以click事件为例. Mouse Events - SMIL <?xml version="1.0" encoding ...

  2. js 绑定事件的几种方法 addEventListener()

    看代码 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title> ...

  3. plupload上传插件绑定事件的两种方法

    在经受一天的磨难之后终于找到处理事件方法: 先引用: <script src="js/plupload.full.min.js" type="text/javasc ...

  4. javascript中为某个对象(控件)绑定事件的几种方法

    今天学习了javascirpt的一些基础知识,有关事件绑定的一些方法: 1.<input type="button" οnclick="clickHandler() ...

  5. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  6. 【js】绑定事件的两种方法

    方法一: 为需要绑定事件的标签添加一个属性onclick 代码实现: <input type="button" value="测试按钮" onclick= ...

  7. 原生js绑定事件的三种方法

    // 绑定事件// 行内绑定// 选择元素绑定事件// 事件监听 有三个参数('什么事件','函数','true或false')true(事件捕获) false(事件冒泡)document.query ...

  8. js绑定事件的三种方法

    1.行内绑定 <style>div {width: 400px;height: 200px;background-color: antiquewhite;}</style> & ...

  9. 【js】js绑定事件的三种方法

    1.行内绑定 <style>div {width: 400px;height: 200px;background-color: antiquewhite;}</style> & ...

最新文章

  1. BZOJ2299 HAOI2011向量(数论)
  2. 使用php最容易犯的11个MySQL错误。
  3. 沃尔沃主动召回40万台车,只因一个罕见的问题
  4. 剑指offer面试题[17]-合并两个排序的链表
  5. WinMerge只显示差异部分的设置方法
  6. uc浏览器邀请码_UC密保手机不能用?冬树教你如何一招申诉成功!
  7. window和document对象
  8. CSS部分设置背景颜色为半透明
  9. Linux ls -l 各字段解释,硬链接软连接
  10. 在ROS中创建工作区时出现错误
  11. PVE使用USB蓝牙直通配置
  12. 从程序员到项目经理(六):程序员加油站 — 懂电脑更要懂人脑
  13. VSS(Visual SourceSafe)使用方法
  14. 【论文】360-aware saliency estimation with conventional image saliency predictors阅读笔记
  15. Django使用supervisor管理celery和uwsgi实践记录 uwsgi BACKOFF Exited too quickly (process log may have details)
  16. 有几种检测方法可以检测沼气成分?
  17. k8s ingress yml 浅薄理解
  18. 鸟哥的Linux私房菜 命令笔记2
  19. sublime加动画css3,CSS3 Sublime 代码编辑器模拟
  20. FileNotFoundError: [Errno 2] No such file or directory: 'XXX' 的解决方法

热门文章

  1. CF1634 F. Fibonacci Additions
  2. 如何更新开源版来客电商代码?
  3. 一向不爱房地产的港股市场,为何对龙湖集团青睐有加?
  4. 制导技术核心电子计算机,军事知识:军事理论题(五)
  5. 2 万字详解,吃透 ES!
  6. 政务公文的知识图谱构建研究
  7. 一篇文章教你完全掌握jni技术
  8. CPU GPU爆显存
  9. 解决mysql存储emoji表情唯一索引报错问题
  10. u0027代表JAVA_java中最容易犯错的特殊字符