首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在React组件中使用setInterval

在React组件中使用setInterval
EN

Stack Overflow用户
提问于 2017-07-18 13:17:25
回答 3查看 10.5K关注 0票数 7

我正在阅读react官方网站上的教程。在关于生命周期方法的示例中,在componentDidMount方法下,为setInterval函数设置了一个timerID。

我的问题是,即使timerID已经初始化,但在整个应用程序中都没有调用它,如果不在应用程序中显式地调用timerID,应用程序如何工作。下面是代码。

代码语言:javascript
运行
复制
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')

);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-18 13:31:19

this.timerID是一个非零数值,用于标识通过调用setInterval()创建的计时器;可以将该值传递给clearInterval以清除计时器。

因此,在componentDidMount中调用setInterval时,如

代码语言:javascript
运行
复制
componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

您希望在挂载组件之后执行tick()函数every 1 sec a。现在,当您导航到另一个组件并且当前组件已卸载时,如果您没有清除对tick()函数的间隔调用,它将继续执行。

因此,在componentWillUnmount函数中,您的计时器将被清除,该值由存储在this.timerID中的setInterval返回的数值标识

代码语言:javascript
运行
复制
componentWillUnmount() {
    clearInterval(this.timerID);
  }

因此,React文档中提供的完整代码是

代码语言:javascript
运行
复制
class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);
票数 7
EN

Stack Overflow用户

发布于 2017-07-18 13:45:09

这很简单。一旦React执行componentDidMount()生命周期方法,计时器就开始运行。

代码语言:javascript
运行
复制
this.timerID = setInterval(
      () => this.tick(),
      1000
    );

上面的计时器将一直运行,直到组件被卸载(根据您的代码)。您的代码以这种方式工作并不令人惊讶。

票数 0
EN

Stack Overflow用户

发布于 2018-10-11 19:34:12

在这个react文档中,它写道

我们将拆除componentWillUnmount()生命周期方法中的计时器

因此,在componentWillUnmount()生命周期方法中将使用this.timerID来停止计时器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45158087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档