清除ReactJS中的setInterval()

时间:2017-02-11 21:19:38

标签: javascript reactjs

我在我的ReactJS应用程序中创建了一个setInterval,稍后当组件卸载时我需要清除它。因此,我无法使用以下代码实现此目标:

    var Timer = React.createClass ({

  getInitialState: function () {
    return ({
      timeLeft: "99:99:99"
    })
  },

  componentDidMount: function () {

    var compteur = setInterval( function () {
      var heure = new Date();
      var timeH = ((0 + this.props.endH - heure.getHours()) > 9) ? (0 + this.props.endH - heure.getHours()) : ("0" + (0 + this.props.endH - heure.getHours())) ;
      var timeM = ((0 + this.props.endM - heure.getMinutes()) > 9) ? (0 + this.props.endM - heure.getMinutes()) : ("0" + (0 + this.props.endM - heure.getMinutes())) ;
      var timeS = ((0 + this.props.endS - heure.getSeconds()) > 9) ? (0 + this.props.endS - heure.getSeconds()) : ("0" + (0 + this.props.endS - heure.getSeconds())) ;

      this.setState({
        timeH: timeH,
        timeM: timeM,
        timeS: timeS
      });

      this.setState ({
        timeLeft: this.state.timeH + ":" + this.state.timeM + ":" + this.state.timeS
       })

    }.bind(this), 900);

    compteur;

  },

  componentWillUnmount: function () {
    console.log("Unmounting Timer...");
    clearInterval(this.compteur);
    this.compteur = false;
  },

  render: function() {
    return (
      <div className="time-count">{this.state.timeLeft}</div>
    )
  }

});

问题是,当我尝试通过clearInterval(compteur)设置间隔后立即清除时间间隔时,它可以正常工作。但是,当我后来尝试使用clearInterval(this.compteur)时,它就不会。

谢谢!

1 个答案:

答案 0 :(得分:1)

当你像这样声明compteur时,你就知道这是一个普通变量,已经变成了componentDidMount函数。

只需替换

var compteur = setInterval( function () {

this.compteus = setInterval( function () {

您可以从this.compteur功能访问componentWillUnmount

工作演示:https://jsfiddle.net/mrlew/bfexkpkx/