Heim  >  Fragen und Antworten  >  Hauptteil

Javascript – Eine Frage zur Reaktion

Das Folgende ist ein einfacher dynamischer Effekt, der in React geschrieben wurde, einige Teile sind jedoch unklar. Warum müssen wir bind(this) am Ende des Timers hinzufügen? Welche Funktion hat es? Mir fehlt ein Wissen, das mich über das Hinzufügen von bind(this) unklar macht?

var Hello = React.createClass({
  getInitialState: function () {
    return {
      opacity: 1.0
    };
  },

  componentDidMount: function () {
    this.timer = setInterval(function () {
      var opacity = this.state.opacity;
      opacity -= .05;
      if (opacity < 0.1) {
        opacity = 1.0;
      }
      this.setState({
        opacity: opacity
      });
    }.bind(this), 100);
  },

  render: function () {
    return (
      <p style={{opacity: this.state.opacity}}>
        Hello {this.props.name}
      </p>
    );
  }
});

ReactDOM.render(
  <Hello name="world"/>,
  document.body
);
PHP中文网PHP中文网2682 Tage vor718

Antworte allen(2)Ich werde antworten

  • 大家讲道理

    大家讲道理2017-06-15 09:25:44

    两个知识点:

    • bind()

    • this 指向

    具体到这个例子,如果不使用bind()而直接调用 setInterval 中定义的匿名函数,函数内部的 this 是指向 window 对象的。匿名函数内部显然需要 this 指向当前组件,才能读取state属性/调用setState()方法,所以使用bind()为匿名函数绑定当前执行环境的 this,即当前组件。

    Antwort
    0
  • phpcn_u1582

    phpcn_u15822017-06-15 09:25:44

    你只要分清下面几个this就知道了。

    1.bind(this)这个this指的是什么。
    2.不bind(this)时,回调执行时,函数里的this指的是什么。
    3.bind(this)之后,回调执行时,函数里的this指的是什么。

    Antwort
    0
  • StornierenAntwort