首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Native Countdown with pause函数

React Native Countdown with pause函数
EN

Stack Overflow用户
提问于 2020-04-22 17:00:50
回答 1查看 246关注 0票数 0

从一个教程开始,我正在尝试制作自己的倒计时计时器,并且我想添加一个暂停功能。它使用moment.js

代码语言:javascript
复制
const [time, setTime] = useState({

    eventDate: moment.duration('00:00:06'),
    days: 0,
    hours: 0,
    mins: 0,
    secs: 0,
  });

const updateTimer = () => {
    const x = setInterval(() => {
      let {eventDate} = time;


      if (eventDate <= 0) {
        clearInterval(x);

      } else {
        eventDate = eventDate.subtract(1, 's');
        const days = eventDate.days();
        const hours = eventDate.hours();
        const mins = eventDate.minutes();
        const secs = eventDate.seconds();

        setTime({
          days,
          hours,
          mins,
          secs,
          eventDate,
        });
      }
    }, 1000);
  };

改变暂停状态的简单按钮,这是有效的

代码语言:javascript
复制
const handlePause = () => {
    {
      !pause ? setPause(true) : setPause(false);
    }
  };

但不是停止useEffect

代码语言:javascript
复制
  useEffect(() => {
    if (pause) {
      return;
    } else {
      updateTimer();
    }
  }, []);

也许所有的事情都是错的,但我没有其他想法去做。建议?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-04-22 17:31:47

找到了!我添加了

代码语言:javascript
复制
 const [intervalTime, setIntervalTime] = useState();

我在函数的末尾设置了它

代码语言:javascript
复制
const updateTimer = () => {
    const x = setInterval(() => {
      let {eventDate} = time;

      if (eventDate <= 0) {
        clearInterval(x);

      } else {
        eventDate = eventDate.subtract(1, 's');
        const days = eventDate.days();
        const hours = eventDate.hours();
        const mins = eventDate.minutes();
        const secs = eventDate.seconds();

        setTime({
          days,
          hours,
          mins,
          secs,
          eventDate,
        });
      }
    }, 1000);
    console.log('interval', x);

    setIntervalTime(x); // set state

    };

然后我在handlePause中使用clearInterval

代码语言:javascript
复制
  const handlePause = () => {
    {
      !pause ? setPause(true) : setPause(false);
    }
    clearInterval(intervalTime);
  };

刚添加的暂停有依赖关系

代码语言:javascript
复制
  useEffect(() => {
    if (!pause) {
      return;
    } else if (pause) {
      updateTimer();
    }
  }, [pause]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61361164

复制
相关文章

相似问题

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