Timer.jsx 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import {useState, useEffect} from 'react';
  2. function Timer({sec}) {
  3. const [count, setCount] = useState(sec);
  4. const [isPaused, setIsPaused] = useState(false);
  5. useEffect(() => {
  6. let timer;
  7. if (count > 0 && isPaused === false) {
  8. timer = setTimeout(() => setCount(count - 1), 1000);
  9. }
  10. return () => {
  11. clearTimeout(timer);
  12. };
  13. }, [count, isPaused]);
  14. useEffect(() => {
  15. setCount(sec);
  16. }, [sec]);
  17. const onBtnPauseClick = () => {
  18. setIsPaused(!isPaused);
  19. };
  20. const h = Math.floor(count / 3600);
  21. const s = count % 60;
  22. const min = Math.floor(count % 3600 / 60);
  23. return (
  24. <div>
  25. <div>{h < 10 ? '0' + h : h}:{min < 10 ? '0' + min : min}:{s < 10 ? '0' + s : s}</div>
  26. <button
  27. className="buttonForTimer"
  28. onClick={onBtnPauseClick}>
  29. {isPaused ? 'Resume' : 'Pause'}
  30. </button>
  31. </div>
  32. );
  33. }
  34. export default Timer;