【发布时间】:2021-07-02 06:50:54
【问题描述】:
我正在学习对钩子做出反应。我写了一个倒计时组件。 useEffect 让我很困惑。
当计时器转到00:00时,它不能显示00:00,只需转到00:10。有人可以帮忙吗?
下面是一个演示。
export default function App() {
const [timer, setTimer] = useState(dayjs().minute(0).second(10));
const [status, setStatus] = useState(true);
const handleReset = () => {
setStatus(true);
setTimer(dayjs().minute(0).second(10));
};
const handleStartStop = () => {
setStatus((pre) => !pre);
};
useEffect(() => {
setTimer((pre) => {
if (pre.format("mm:ss") === "00:00") {
return dayjs().minute(0).second(10);
}
return pre;
});
}, [timer]);
useEffect(() => {
if (!status) {
const intervalId = setInterval(() => {
setTimer((pre) => {
return pre.subtract(1, "second");
});
}, 1000);
return () => {
clearInterval(intervalId);
};
}
}, [status]);
return (
<>
<div id="timer-label">
count down
<div id="time-left">{timer.format("mm:ss")}</div>
<div>
<button id="start_stop" onClick={() => handleStartStop()}>
{status ? "start" : "stop"}
</button>
<button id="reset" onClick={handleReset}>
reset
</button>
</div>
</div>
</>
);
}
【问题讨论】:
-
我刚刚运行了您的沙箱,倒计时达到“00:00”,然后从“00:10”重新开始。你能澄清一下问题是什么吗?预期的结果是什么?如果您想避免点击“00:00”,那么您的条件应该是
if (pre.format("mm:ss") === "00:01") {。 -
你能澄清更多你的查询吗?
-
我已经更改了我的沙箱。我不明白这个版本为什么不能按我的预期工作。 @AnilLoutombam
-
我看到了同样的行为。有什么改变吗?据我所知,您的代码运行正常。如果你想让它做其他事情,那么你需要更好地描述你的期望。
-
你能不能说的更具体一点,有什么问题
标签: reactjs react-hooks use-effect