美文网首页
React事件处理笔记二

React事件处理笔记二

作者: mathfriend | 来源:发表于2019-08-13 13:32 被阅读0次

回调函数中的 this,类的方法默认是不会绑定 this 的。如果忘记绑定 this.handleClick 并把它传入 onClick, 当调用这个函数的时候 this 的值会是 undefined。

这并不是 React 的特殊行为;它是函数如何在 JavaScript 中运行的一部分。通常情况下,如果没有在方法后面添加 () ,例如 onClick={this.handleClick},应该为这个方法绑定 this。

使用 bind 有两种方式可以解决。如果正在使用实验性的属性初始化器语法,可以使用属性初始化器来正确的绑定回调函数:

class LoggingButton extends React.Component {

  // 这个语法确保了 `this` 绑定在  handleClick 中

  // 这里只是一个测试

  handleClick = () => {

    console.log('this is:', this);

  }

  render() {

    return (

      <button onClick={this.handleClick}>

        Click me

      </button>

    );

  }

}

如果没有使用属性初始化器语法,可以在回调函数中使用 箭头函数:

class LoggingButton extends React.Component {

  handleClick() {

    console.log('this is:', this);

  }

  render() {

    //  这个语法确保了 `this` 绑定在  handleClick 中

    return (

      <button onClick={(e) => this.handleClick(e)}>

        Click me

      </button>

    );

  }

}

使用这个语法有个问题就是每次 LoggingButton 渲染的时候都会创建一个不同的回调函数。在大多数情况下,这没有问题。然而如果这个回调函数作为一个属性值传入低阶组件,这些组件可能会进行额外的重新渲染。通常建议在构造函数中绑定或使用属性初始化器语法来避免这类性能问题。

相关文章

  • React事件处理笔记二

    回调函数中的 this,类的方法默认是不会绑定 this 的。如果忘记绑定 this.handleClick 并把...

  • 2018-11-07 react 事件处理

    react事件处理和dom事件处理是相似的。 react: Dom: 所以: React事件绑定属性的命名采用驼峰...

  • react文档——事件处理

    事件处理 React 元素的事件处理和 DOM 元素的事件处理非常相似。但也有一些语法差异: React 事件使用...

  • React 事件处理机制

    React在处理事件和HTML中JS处理事件不同,本文介绍React中的事件处理机制。React中不同通过返回fa...

  • React基础(6) -- 事件处理

    React 事件处理 React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同: React 事件绑...

  • ReactJS_06 React 事件处理

    React 事件处理 React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同: React 事件绑...

  • React 事件处理

    React 事件处理 React 元素的事件处理和 DOM 元素类似。但是有一点语法上的不同: React 事件绑...

  • react随笔5 事件处理

    事件处理 React元素的事件处理和DOM元素的事件处理很相似,但是有一点语法上的不同: React事件绑定属性的...

  • React事件绑定this的几种方法

    React事件处理函数绑定this的集中方法 Follow me on GitHub React事件处理函数绑定t...

  • 学习笔记:React事件处理

    一、React 事件处理 React 元素的事件处理和 DOM 元素类似,但是有一点语法上的不同。 React 事...

网友评论

      本文标题:React事件处理笔记二

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