【问题标题】:Calling function at set intervals in React presentational component [duplicate]在 React 展示组件中以设定的时间间隔调用函数 [重复]
【发布时间】:2018-01-02 06:06:52
【问题描述】:

我正在尝试在我的 presenational React 组件中使用 moment.js 实现滴答计时器。作为第一步,我只想每秒调用一个函数,但我没有得到函数应该返回的文本,而是得到一个 int 值。

知道我应该如何实现吗?

这是我的组件:

import React, { PropTypes } from 'react';
import moment from 'moment';

const tickingTimer = () => {

   return "00:02:48";
}

const MyComponent = () => {

   return(
      <div>
         <div>{setInterval(tickingTimer(), 1000)}</div>
      </div>
   );
}

export default MyComponent;

React 呈现页面时,我看到的不是00:02:48,而是上升了3 倍的int 值,例如20、21、22

如何在我的展示组件中调用每秒返回一个值的函数?

【问题讨论】:

  • 为什么不查看setInterval 的文档,看看它为什么会这样做?

标签: javascript reactjs momentjs


【解决方案1】:

原因是 setInterval 返回一个 timerId,您可以稍后使用它来清除间隔。

需要将函数的返回值保存在状态

import React, { PropTypes } from 'react';
import moment from 'moment';

const tickingTimer = () => {

   return "00:02:48";
}

const MyComponent class extends React.Component {
   state = { 
      timer: ''
   }
   componentDidMount(){
       setInterval(tickingTimer, 1000)
   }

   tickingTimer = () => {

     this.setState({timer:"00:02:48"});
    }
   return(
      <div>
         <div>{this.state.timer}</div>
      </div>
   );
}

export default MyComponent;

【讨论】:

  • 谢谢。我唯一需要弄清楚的是在演示组件中实现这一点。我认为我不能在 presenational 组件中使用 componentDidMount()
  • @Sam 如果您要拥有一个计时器,那么拥有一个演示组件是零意义的。根据定义,计时器具有内部状态,而表示组件不应/不能具有内部状态。
  • 不,你不能,要么你需要从父母那里得到它
  • 在这种特殊情况下,我的时间将显示自我存储在Redux 存储中的设定时间以来经过的小时、分钟和秒。该值没有改变。 moment 应该只是显示自该设置日期/时间以来经过的时间。在这种情况下,我的价值状态没有改变。这就是我使用 moment 并使用 presenational 组件的原因。
  • 那你为什么需要一个 setInterval
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2015-05-03
  • 2021-11-01
  • 2016-04-04
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多