详解react关于事件绑定this的四种方式
2018-03-09 09:38
776 查看
在react组件中,每个方法的上下文都会指向该组件的实例,即自动绑定this为当前组件,而且react还会对这种引用进行缓存,以达到cpu和内存的最大化。在使用了es6 class或者纯函数时,这种自动绑定就不复存在了,我们需要手动实现this的绑定
React事件绑定类似于DOM事件绑定,区别如下:
1.React事件的用驼峰法命名,DOM事件事件命名是小写
2.通过jsx,传递一个函数作为event handler,而不是一个字符串。
3.React事件不能通过返回false来阻止默认事件,需要显式调用preventDefault()
如下实例:
<a href="#" onclick="console.log('The link was clicked.'); return false"> Click me </a> class ActionLink extends React.Component { constructor(props) { super(props); } handleClick(e) { e.preventDefault(); console.log('The link was clicked.'); } render() { return ( <a href="#" onClick={this.handleClick.bind(this)}>Click Me...</a> ); } }
ps:React组件类的方法没有默认绑定this到组件实例,需要手动绑定。
以下是几种绑定的方法:
bind方法
直接绑定是bind(this)来绑定,但是这样带来的问题是每一次渲染是都会重新绑定一次bind;
class Home extends React.Component { constructor(props) { super(props); this.state = { }; } del(){ console.log('del') } render() { return ( <div className="home"> <span onClick={this.del.bind(this)}></span> </div> ); } }
构造函数内绑定
在构造函数 constructor 内绑定this,好处是仅需要绑定一次,避免每次渲染时都要重新绑定,函数在别处复用时也无需再次绑定
class Home extends React.Component { constructor(props) { super(props); this.state = { }; this.del=this.del.bind(this) } del(){ console.log('del') } render() { return ( <div className="home"> <span onClick={this.del}></span> </div> ); } }
::不能传参
如果不传参数使用双冒号也是可以
class Home extends React.Component { constructor(props) { super(props); this.state = { }; } del(){ console.log('del') } render() { return ( <div className="home"> <span onClick={::this.del}></span> </div> ); } }
箭头函数绑定
箭头函数不仅是函数的'语法糖',它还自动绑定了定义此函数作用域的this,因为我们不需要再对它们进行bind方法:
class Home extends React.Component { constructor(props) { super(props); this.state = { }; } del=()=>{ console.log('del') } render() { return ( <div className="home"> <span onClick={this.del}></span> </div> ); } }
以上几种方法都可以实现this绑定,使用那种各自的习惯;希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- jQuery四种事件绑定方式.bind(),.live(),.delegate(),on()的区别
- Android 四种绑定监听事件的方式
- Android 四种绑定监听事件的方式
- jQuery绑定事件的四种方式介绍
- jQuery四种事件绑定方式.bind(),.live(),.delegate(),on()的区别
- jQuery绑定事件的四种方式
- jQuery绑定事件的四种方式
- 关于原生事件绑定中attachEvent与addEventlistener中兼容性以及attachEvent函数中this指代window问题
- 关于JavaScript 三种绑定事件方式之间的区别以及对应的解绑(整理)
- Android四种绑定监听事件的方式
- Android 四种绑定监听事件的方式
- 001_关于循环绑定事件函数中的对象索引值与this
- this四种绑定方式之间的奇淫技巧
- 关于SWT/JFace的事件模型的四种方式
- jQuery绑定事件的四种方式
- jQuery绑定事件的四种方式
- jQuery绑定事件的四种方式
- jQuery绑定事件的四种方式
- jQuery绑定事件的四种方式:bind、live、delegate、on
- 关于Jquery中的bind(),on()绑定事件方式总结