RecordingTimer.js 998 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import React, { useState, useEffect } from "react";
  2. import { makeStyles } from "@material-ui/core/styles";
  3. const useStyles = makeStyles(theme => ({
  4. timerBox: {
  5. display: "flex",
  6. marginLeft: 10,
  7. marginRight: 10,
  8. alignItems: "center",
  9. },
  10. }));
  11. const RecordingTimer = () => {
  12. const classes = useStyles();
  13. const initialState = {
  14. minutes: 0,
  15. seconds: 0,
  16. };
  17. const [timer, setTimer] = useState(initialState);
  18. useEffect(() => {
  19. const interval = setInterval(
  20. () =>
  21. setTimer(prevState => {
  22. if (prevState.seconds === 59) {
  23. return { ...prevState, minutes: prevState.minutes + 1, seconds: 0 };
  24. }
  25. return { ...prevState, seconds: prevState.seconds + 1 };
  26. }),
  27. 1000
  28. );
  29. return () => {
  30. clearInterval(interval);
  31. };
  32. }, []);
  33. const addZero = n => {
  34. return n < 10 ? "0" + n : n;
  35. };
  36. return (
  37. <div className={classes.timerBox}>
  38. <span>{`${addZero(timer.minutes)}:${addZero(timer.seconds)}`}</span>
  39. </div>
  40. );
  41. };
  42. export default RecordingTimer;