代码之家  ›  专栏  ›  技术社区  ›  user3808307

如何以这种特殊方式清除间隔集

  •  0
  • user3808307  · 技术社区  · 6 年前

    我在做反应。我想清除componentwillunmount上的间隔

    间隔设置如下

    setInterval( () => this.baz(), 1000 );
    

    在这里跟随这个答案 Referencing "this" inside setInterval/setTimeout within object prototype methods

    我该怎么清除呢?如果这是个基本问题,我很抱歉

    2 回复  |  直到 6 年前
        1
  •  4
  •   Ori Drori    6 年前

    保存对的引用 intervalID 在组件上( this.intervalID ,并在componentwillunmount中清除:

    class Demo extends React.Component {
      componentDidMount() {
        this.intervalID = setInterval( () => this.baz(), 1000 );
      }
    
      componentWillUnmount() {
        clearInterval(this.intervalID);
      }
    
      render() {
        //...
      }
    }
    
        2
  •  2
  •   samanime    6 年前

    setInterval 调用时返回ID。你只需要把它保存下来传给 clearInterval() . 您可以很容易地将其保存在您的状态中:

    this.setState({ intervalId: setInterval(() => this.baz(), 1000) });
    

    然后在 componentWillUnmount() :

    clearInterval(this.state.intervalId);