深入解析react关于事件绑定this的四种方式

版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 https://blog.csdn.net/qq_43168841/article/details/85019181

这篇文章主要介绍了详解react关于事件绑定this的四种方式,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。

在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.');
}//欢迎加入前端全栈开发交流圈一起学习交流:864305860
 
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 = {
  };//欢迎加入前端全栈开发交流圈一起学习交流:864305860
 } 
 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 = { 
  };//欢迎加入前端全栈开发交流圈一起学习交流:864305860
  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 = { 
  };//欢迎加入前端全栈开发交流圈一起学习交流:864305860
 } 
 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 = { 
  }; //欢迎加入前端全栈开发交流圈一起学习交流:864305860
 } 
 del=()=>{
  console.log('del')
 }
 render() {
  return (
   <div className="home">
    <span onClick={this.del}></span>
   </div>
  );
 }
}

以上几种方法都可以实现this绑定,使用那种各自的习惯;希望对大家的学习有所帮助

结语

感谢您的观看,如有不足之处,欢迎批评指正。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

猜你喜欢

转载自blog.csdn.net/qq_43168841/article/details/85019181