React事件处理函数中绑定this的bind()函数
2017-04-18 00:00
267 查看
摘要: React事件处理函数中绑定this的bind()函数
今天在看最新的React官方教程时发现了一个问题,开始全面使用ES6语法的React在Handling Events这节中,提到了绑定的事件处理函数要现在构造函数中使用bind()将this进行正确的绑定,涉及到的代码如下:
之前就一直对bind()函数理解不够深入,这里使用bind()的作用一开始不是很明白,就在网上查阅了资料,在MDN技术文档中找到了这一函数的具体作用如下:
bind()方法会创建一个新函数,当这个新函数被调用时,它的this值是传递给bind()的第一个参数, 它的参数是bind()的其他参数和其原本的参数.
之后在后面的一个例子很好的解释了React这里使用bind的作用:
创建绑定函数
bind() 最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的 this 值。JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,希望方法中的 this 是原来的对象。(比如在回调中传入这个方法。)如果不做特殊处理的话,一般会丢失原来的对象。从原来的函数和原来的对象创建一个绑定函数,则能很漂亮地解决这个问题:
结合这里的例子进行理解,React构造方法中的bind即将handleClick函数与这个组件Component进行绑定以确保在这个处理函数中使用this时可以时刻指向这一组件。
今天在看最新的React官方教程时发现了一个问题,开始全面使用ES6语法的React在Handling Events这节中,提到了绑定的事件处理函数要现在构造函数中使用bind()将this进行正确的绑定,涉及到的代码如下:
class Toggle extends React.Component { constructor(props) { super(props); this.state = {isToggleOn: true}; // This binding is necessary to make `this` work in the callback this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { return ( <button onClick={this.handleClick}> {this.state.isToggleOn ? 'ON' : 'OFF'} </button> ); } }
之前就一直对bind()函数理解不够深入,这里使用bind()的作用一开始不是很明白,就在网上查阅了资料,在MDN技术文档中找到了这一函数的具体作用如下:
bind()方法会创建一个新函数,当这个新函数被调用时,它的this值是传递给bind()的第一个参数, 它的参数是bind()的其他参数和其原本的参数.
之后在后面的一个例子很好的解释了React这里使用bind的作用:
创建绑定函数
bind() 最简单的用法是创建一个函数,使这个函数不论怎么调用都有同样的 this 值。JavaScript新手经常犯的一个错误是将一个方法从对象中拿出来,然后再调用,希望方法中的 this 是原来的对象。(比如在回调中传入这个方法。)如果不做特殊处理的话,一般会丢失原来的对象。从原来的函数和原来的对象创建一个绑定函数,则能很漂亮地解决这个问题:
this.x = 9; var module = { x: 81, getX: function() { return this.x; } }; module.getX(); // 返回 81 var retrieveX = module.getX; retrieveX(); // 返回 9, 在这种情况下,"this"指向全局作用域 // 创建一个新函数,将"this"绑定到module对象 // 新手可能会被全局的x变量和module里的属性x所迷惑 var boundGetX = retrieveX.bind(module); boundGetX(); // 返回 81
结合这里的例子进行理解,React构造方法中的bind即将handleClick函数与这个组件Component进行绑定以确保在这个处理函数中使用this时可以时刻指向这一组件。
相关文章推荐
- React事件处理函数中绑定this的bind()函数
- React事件处理函数中绑定this的bind()函数
- javascript使用bind()函数绑定this
- bind(this)绑定this指向的对象、箭头函数和闭包
- [Boost基础]函数与回调——bind绑定
- jquery获取任意点击到的对象,绑定点击函数event.target 不能用this
- boost::bind boost::function绑定万能函数测试2(类成员函数和虚函数)
- IE attachEvent绑定的函数中this引用
- 使用boost.bind绑定class的成员函数作为boost thread的入口
- JS+Zero Clipboard swf复制到剪贴板 兼容浏览器(bind事件绑定函数)
- JS: addEventListener 和 attachEvent 绑定的函数中this的区别
- 事件绑定之bindEvent()与 unBindEvent()函数
- Mootools中使用bind给函数绑定对象
- 绑定函数bind()
- sqlite3中绑定bind函数用法 (将变量插入到字段中)
- JQuery入门――用bind方法绑定事件处理函数应用介绍
- C++关于tr1中绑定成员函数的bind使用
- 简析function/bind如何实现类成员函数指针绑定调用
- 轻松查看attachEvent方法绑定的事件处理函数(如jQuery的bind方法绑定的函数)
- 绑定函数【OpenGL】关于OpenGL中Bind函数的理解