如何将当前数据保存在间隔更新状态下的变量

how to save a variable with the current data saved in an interval updating state

我正在 here 中构建一个典型的 stopwatch/clock 应用程序。

问题:当单击 Pause 按钮然后单击 Split 按钮(打印经过的时间)然后重新开始时,秒表和打印的时间都会重新启动。那是因为我在 handleClickSplit 函数中节省了 Crono 时间。关于保存 当前暂停时间 以防止错误的最佳方法有什么想法吗?

这是图片

这是我的代码:

export default function Home({ enableCrono }) {
  const [cronoTime, setCronoTime] = useState({ h: 0, m: 0, s: 0, ms: 0 });
  const [printTime, setPrintTime] = useState([]);
  const [interv, setInterv] = useState();
  const [status, setStatus] = useState(0);
  // 0 => not running
  // 1 => start
  // 2 => pause
  // 3 => stop

  const start = () => {
    if (cronoTime.m === 60) {
      cronoTime.h++;
      cronoTime.m = 0;
    }
    if (cronoTime.s === 60) {
      cronoTime.m++;
      cronoTime.s = 0;
    }
    if (cronoTime.ms === 100) {
      cronoTime.s++;
      cronoTime.ms = 0;
    }
    cronoTime.ms++;
    return setCronoTime({
      ms: cronoTime.ms,
      s: cronoTime.s,
      m: cronoTime.m,
      h: cronoTime.h,
    });
  };

  const handleClickStart = () => {
    start();
    setStatus(1);
    setInterv(setInterval(start, 10));
  };
  const handleClickStop = () => {
    clearInterval(interv);
    setStatus(3);
  };
  const handleClickPause = () => {
    clearInterval(interv);
    setStatus(2);
  };

  const handleClickClear = () => {
    clearInterval(interv);
    setStatus(0);
    setCronoTime({ h: 0, m: 0, s: 0, ms: 0 });
    setPrintTime([]);
  };

  const handleClickSplit = () => {
    setPrintTime((prevtime) => [...prevtime, cronoTime]);

您正在 printTime 数组中保存对同一个 cronoTime 对象的引用。只需保存一个新对象,这样 cronoTime 上的更改就不会传播到 printTime 中的对象:

setPrintTime((prevtime) => [...prevtime, {...cronoTime}]);