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

React.js和ES6:任何不在构造函数中绑定函数的原因

徐晔
2023-03-14
问题内容

我正在将React组件更新到ES6的过程中,遇到了该问题中描述的问题-
无法在事件处理程序内部访问React实例(this) -即未绑定到组件实例。

这是有道理的,当然可以,但是我对答案的另一部分感到困惑:

请注意,绑定功能会创建一个新功能。您可以将其直接绑定到render中,这意味着每次渲染该组件时都会创建一个新函数,或者将其绑定到构造函数中,后者只会触发一次。

constructor() {
  this.changeContent = this.changeContent.bind(this);
}

render() {
  return <input onChange={this.changeContent.bind(this)} />;
}

我假设在构造函数中进行绑定是性能等方面的首选方法,但是您知道他们说的 前提

这两种方法的权衡是什么?有没有一种情况肯定比另一种更好?还是没关系?


问题答案:

构造函数中绑定的缺点:反应热加载器将无法工作。

在render()中绑定的缺点:性能。

最近,我一直在这样做。它比在渲染中绑定要快一些,但是我愿意为了灵活性和我梦H以求的HMR而牺牲性能

render(){
  return <input onChange={(e) => this.handleChange(e.target.value)}>;
}

例如,它提供了更多的灵活性,并且更容易过渡到规范的Input原子。

render(){
  return <input onChange={(x) => this.handleChange(x)}>;
}

或在需要的地方添加参数:

render(){
  return (
    <ul>
      {this.props.data.map((x, i) => {
        // contrived example
        return (
          <li 
            onMouseMove={(e) => this.handleMove(i, e.pageX, e.pageY)}>
          {x}
          </li>
        );
      }}
    </ul>
  );
}


 类似资料:
  • Guice提供了一种使用toConstructor()方法与对象的特定构造函数创建绑定的方法。 @Override protected void configure() { try { bind(SpellChecker.class) .toConstructor(SpellCheckerImpl.class.getConstructor(String.clas

  • 问题内容: 我对此代码有疑问:https : //github.com/reactjs/redux/blob/master/examples/async/containers/App.js 特别: 我猜这是一个两部分的问题。 为什么我需要将句柄更改设置为类的实例,我不能只对handleChange使用静态函数并直接在类中调用它 ? 我不知道这是怎么回事: 谢谢 问题答案: 以相反的顺序回答… 返回

  • 对不起,我能看到这个问题本问了好几次。我以前解决过这个问题,但我知道我正在以一种新的方式看待它。 这是我在流量存储中的构造函数: 下面是我通过TodoActions.fuction子组件中的Name调用的一些函数: 我得到

  • 我在做一个非常简单的两个按钮状态。如果我点击abutton,A组件显示,如果点击bButk,那么B组件。我正在映射通过数组的项目,以便每个项目都有自己的按钮状态。假设我点击项目1的按钮B,那么我只想要第一个项目B显示。现在所有这些都会同时被触发。我已经在构造函数中限制了它们,但我仍然无法只获得一次点击触发并显示相关组件。

  • 类构造函数 类constructor是类的特殊成员函数,只要我们创建该类的新对象,就会执行该函数。 构造函数与类具有完全相同的名称,它根本没有任何返回类型,甚至无效。 构造函数对于为某些成员变量设置初始值非常有用。 下面的例子解释了构造函数的概念 - #include <iostream> using namespace std; class Line { public: voi

  • 类构造函数 类constructor是类的特殊成员函数,只要我们创建该类的新对象,就会执行该函数。 构造函数与类具有完全相同的名称,并且根本没有任何返回类型,甚至无效。 构造函数对于为某些成员变量设置初始值非常有用。 以下示例解释了构造函数的概念 - import std.stdio; class Line { public: void setLength( double l