微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

防止页面刷新/重新加载-ReactJS

如何解决防止页面刷新/重新加载-ReactJS

我已经使用React钩子建立了一个倒数计数器,但是当我将它的准确度与它的原始JS对应物进行比较时(我在文档标题显示了它们的当前计时器,即我在第三个选项卡上处于活动状态),注意到react计时器在一段时间后停止,并且当我打开选项卡时,页面刷新并且计时器重置为其初始状态,而在普通JS版本中没有/没有发生。我想提到的是,我打开了15部YouTube视频,因为我希望计时器在我的机器上进行繁重的工作时能正常工作。如何防止这种情况发生?

这是代码

App.js

import React,{ useState } from 'react';
import convertTime from '../helper-functions/convertTime';
import useInterval from '../hooks/useInterval';

const Countdown = () => {
  const [count,setCount] = useState(82.5 * 60);
  const [delay,setDelay] = useState(1000);
  const [isPlaying,setIsPlaying] = useState(false);
  document.title = convertTime(count);
  useInterval(() => setCount(count - 1),isPlaying ? delay : null);

  const handlePlayClick = () => setIsPlaying(true);
  const handlePauseClick = () => setIsPlaying(false);

  const handleResetClick = () => {
    setCount(82.5 * 60);
    setDelay(1000);
    setIsPlaying(false);
  };
  return (
    <div className='counter'>
      <div className='time'>{convertTime(count)}</div>
      <div className='actions'>
        <button onClick={handlePlayClick}>play</button>
        <button onClick={handlePauseClick}>pause</button>
        <button onClick={handleResetClick}>reset</button>
      </div>
    </div>
  );
};

export default Countdown;

useInterval.js

import React,{ useState,useEffect,useRef } from 'react';

function useInterval(callback,delay) {
  const savedCallback = useRef();

  // Remember the latest callback.
  useEffect(() => {
    savedCallback.current = callback;
  },[callback]);

  // Set up the interval.
  useEffect(() => {
    function tick() {
      savedCallback.current();
    }
    if (delay !== null) {
      let id = setInterval(tick,delay);
      return () => clearInterval(id);
    }
  },[delay]);
}

export default useInterval;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。