美文网首页好程序员大前端
好程序员分享React-010-事件处理函数的this指向问题

好程序员分享React-010-事件处理函数的this指向问题

作者: ab6973df9221 | 来源:发表于2019-08-09 15:33 被阅读0次

好程序员分享React-010-事件处理函数的this指向问题,区分普通函数与事件处理函数

1、普通函数是直接调用的。不存在 this 指向问题,谁调用的,this 指向就是谁。

2、普通函数没有事件对象 event

3、事件处理函数其实也是一个函数,只是他绑定在某个事件上。

4、事件处理函数的 this 默认指向 undefined

解决this指向问题的4种办法

1、直接在事件绑定的地方加上 .bind(this)

<button onClick={this.handleClick.bind(this)}>点我</button>

2、使用箭头函数

<button

  onClick={event => {

    this.handleClick(event);

  }}

>

点我

</button>

3、在构造函数中统一进行this指向的绑定

  constructor() {

    super();

    this.handleClick = this.handleClick.bind(this);

  }

  render() {

    return (

      <button onClick={this.handleClick}>点我</button>

    )

  }

4、使用实验性质的 public class fileds 语法。要去使用的话,的需要babel插件的支持.

1、安装@babel/plugin-proposal-class-properties babel 插件

2、去 babel 的配置文件中,配置好

3、从新启动项目

class App extends React.Component {

  handleClick =() => {

    console.log(this);

  };

}

为啥要使用 bind 来修改this指向,而不能使用 apply、call?

因为 apply 与 call 他们会直接执行函数,而 bind 会返回一个新的函数。

在调用子组件的时候,需要传递一个方法下去,这时这个方法的this绑定推荐使用哪几种:

推荐使用:在构造函数中的bind 与 public class fileds 语法。

1、首先要知道的是,父组件render,子组件一定会render

2、我们希望如果子组件没有发生变化,那么在 父组件render的时候,让子组件不做render。节省性能。

3、要实现第2点,可以让子组件继承的是 PureComponent

4、PureComponent 。它会帮助我们计算子组件接收到的porps 有没有发生变化,如果有那么就 render .如果没有就阻止render

<Child onFn1={this.handleFn1.bind(this)}  />

// 由于 .bind() 方法每次都会返回一个新的函数,所以这种方式不推荐。。。。

<Child onFn1={() =>{ this.handleFn1() }}  />

// 由于 每次执行到这行代码,箭头返回都是一个新的箭头函数,所以这种方式不推荐

constructor() {

  super();

  this.handleFn1 = this.handleFn1.bind(this)

}

<Child onFn1={this.handleFn1}  />

 // 由于 constructor 构造函数只会执行一次,后续执行到 Child 的代码,传递过去的 onFn1 没有发生变化

 // 所以这种方式推荐

<Child onFn1={this.handleFn1}  />

handleFn1 =() => {

  ...

}

// 这种方式同样也推荐。

好程序员官网:http://www.goodprogrammer.org/

相关文章

  • 好程序员分享React-010-事件处理函数的this指向问题

    好程序员分享React-010-事件处理函数的this指向问题,区分普通函数与事件处理函数 1、普通函数是直接调用...

  • this的关键字理解和指向

    普通函数中this指向的是window 事件处理函数中this指向事件源: 回调函数中this指向window: ...

  • JavaScript变幻莫测的上下文对象-this

    一、全局环境 this指向window 二、事件处理函数 事件函数中的this的两种情况 1、普通函数--谁调用t...

  • React事件处理函数this指向解析

    我们知道,由于浏览器的工作原理,事件处理函数当中的this都是指向当前的绑定了事件处理函数的DOM节点对象。但是一...

  • 2022-07-16

    07_事件处理 methods:事件配置项,里面的函数被vue管理,函数的this指向vm 或 组件实例对象 pr...

  • JS--this指向问题

    JS--this指向问题 1.function中的this在不同环境下的指向 事件调用环境:谁触发的事件,函数里面...

  • 25.javascript 事件绑定及深入

    学习要点: 1.传统事件绑定的问题2.W3C 事件处理函数3.IE 事件处理函数4.事件对象的其他补充 事件绑定分...

  • 17. 调试jquery 事件监听

    jquery事件监听指向jquery的源代码,这对于调试没啥用,我们可以通过查看监听器方法的定义,找到事件处理函数

  • javascript 之事件处理函数和事件对象

    本文主要谈及问题: 关于编写跨浏览器的事件处理函数和事件对象 关于编写跨浏览器的事件处理函数和事件对象 为什么要编...

  • react事件处理

    一,事件处理 写法:on+事件名称= {事件处理函数} 类组件触发写法on+事件名称 = 事件处理函数 ---...

网友评论

    本文标题:好程序员分享React-010-事件处理函数的this指向问题

    本文链接:https://www.haomeiwen.com/subject/skdhjctx.html