当前位置: 首页 > 面试题库 >

React.js ES6避免将'this'绑定到每个方法

艾意蕴
2023-03-14
问题内容

最近,我开始修补React.js,我喜欢它。我开始使用常规的ES5,以便掌握所有内容,所有文档均使用ES5编写…

但是现在我想尝试一下ES6,因为它有光泽而且是新的,而且似乎确实简化了某些事情。让我感到困扰的是,对于我添加到组件类中的每个方法,现在都必须将“
this”绑定到该方法,否则它将无法正常工作。所以我的构造函数最终看起来像这样:

constructor(props) {
  super(props);
  this.state = { ...some initial state... }

  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
  this.someHandler = this.someHandler.bind(this);
}

如果我要在类中添加更多方法,这将变得更大,更难看。

我的问题是,是否有某种方法可以解决此问题,或者至少使其更容易,更短且更不丑陋?我想在React中使用ES6的主要原因之一是使我的代码更简洁,但这却相反。任何建议或意见将不胜感激。


问题答案:

您可以使用类字段在构造函数外部进行绑定。它们如下所示:

class Foo extends React.Component {

  handleBar = () => {
    console.log('neat');
  };

  handleFoo = () => {
    console.log('cool');
  };

  render() {
    return (
      <div
        onClick={this.handleBar}
        onMouseOver={this.handleFoo}
      />
    );
  }

}

Babel通过其类属性转换实验性地支持了类字段,但是它们仍然是“实验性的”,因为它们是Stage 3
Draft
(尚未在Babel预设中)。

您将需要手动进行绑定,直到ES7或启用Babel中的功能为止。Babel在React on ES6
+
上的博客文章对此主题进行了简要介绍。



 类似资料:
  • 问题内容: 每当关于Java同步的问题浮出水面时,有些人就会很想指出应该避免的事情。他们声称,取而代之的是,最好是锁定私有引用。 给出的一些原因是: 一些邪恶的代码可能会窃取你的锁(非常流行,也有一个“偶然”的变体) 同一类中的所有同步方法都使用完全相同的锁,这会降低吞吐量 你(不必要地)暴露了太多信息 包括我在内的其他人则认为,这是一个惯用语言(在Java库中也是如此),是安全且易于理解的。应当

  • 在开发新产品时,我创建了一个后端和前端项目。对于前端,我使用带有Typescript的角度框架。下面是一个问题,因为我对这门语言还不熟悉(几天前)。我的问题是关于回调以及如何避免“this”上下文中的显式传递。我已经阅读了一些资源,我将链接它们。 下面我将为HttpClient实现一个包装器。快速版本是使用插件架构(由角度路由支持)的模块进行流控制,最好是通过使用观察员和订阅者广播401之类的错误

  • 问题内容: 我正在遵循一个教程来更新ReactJS中的状态。我在本教程中碰到了这一行,但我不知道发生了什么。我了解此基本知识并进行绑定,但我从未见过如此做过。有人可以解释一下吗?完整代码: 问题答案: 诸如事件之类的DOM回调会将上下文设置为DOM元素本身,在本例中为。尝试删除您不了解的部分,然后看看会发生什么- 您会看到类似的内容,因为该功能未在元素的上下文中定义(基本上是在寻找)。 什么是在该

  • 我正试着把RabbitMQ和骆驼一起用。我使用的是骆驼2.14.1。 我想在RabbitMQ上打开一个扇出交换,然后将队列绑定到它。这似乎很管用。但是,每次创建Exchange时,它都会自动绑定到带有系统名(一个数字)的队列中。我就不能避免吗?这里有一个简单的例子,它将100条消息发送给一个交换机。但它们会被传递到自动创建的队列中,我希望避免这种情况。 更新:从源代码中可以看出,如果RabbitM

  • 问题内容: 我们应该避免在render内部绑定方法,因为在重新渲染期间它将创建新方法而不是使用旧方法,这会影响性能。 所以对于这样的场景: 我们可以在构造函数中绑定方法: 或者我们可以使用属性初始化器语法: 现在让我们考虑一下要传递一些额外参数的情况,在一个简单的todo应用中说,项目的onclick我需要从数组中删除该项目,为此我需要在每个项目中传递项目索引或todo名称onClick方法: 现

  • 本文向大家介绍React.js绑定this的5种方法(小结),包括了React.js绑定this的5种方法(小结)的使用技巧和注意事项,需要的朋友参考一下 this在javascript中已经相当灵活,把它放到React中给我们的选择就更加困惑了。下面一起来看看React this的5种绑定方法。 1.使用React.createClass 如果你使用的是React 15及以下的版本,你可能使用过