React Native:计时器不断重置
React Native: Timer keeps reseting
我正在尝试做一个倒数计时器,但在它达到 1 后,当它应该转到“00:00”时它会重置为 5,我不知道我哪里出错了,请有人帮助我
这是我的代码:
const CountDown = () => {
const RESET_INTERVAL_S = 5;
const formatTime = (time) =>
`${String(Math.floor(time / 60)).padStart(2, "0")}:${String(
time % 60
).padStart(2, "0")}`;
const Timer = ({ time }) => {
const timeRemain = RESET_INTERVAL_S - (time % RESET_INTERVAL_S);
return (
<>
<Text>{formatTime(timeRemain)}</Text>
</>
);
};
const IntervalTimerFunctional = () => {
const [time, setTime] = useState(0);
console.log("The time is", time);
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => t + 1);
}, 1000);
return () => clearInterval(timerId);
}, []);
return <Timer time={time} />;
};
return <IntervalTimerFunctional />;
};
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => t + 1);
}, 1000);
return () => clearInterval(timerId);
}, []);
您需要设置要重复的值。如果没有,这将继续重置它。
您还可以添加一个条件来检查计时器的值并停止它。像这样:
{
time !== 0 ? setTime((t) => t+1): time = 0;
}
我不确定这是一个完美的解决方案,但这可行:
您可以在计时器达到最大值时停止计时器:
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => {
if(t + 1 === RESET_INTERVAL_S) {
clearInterval(timerId)
}
return t + 1;
});
}, 1000);
return () => clearInterval(timerId);
}, []);
并在达到限制时显示“00:00”:
<Text>{time === RESET_INTERVAL_S ? "00:00" : formatTime(timeRemain)}</Text>
这是一个有效的 example
我正在尝试做一个倒数计时器,但在它达到 1 后,当它应该转到“00:00”时它会重置为 5,我不知道我哪里出错了,请有人帮助我
这是我的代码:
const CountDown = () => {
const RESET_INTERVAL_S = 5;
const formatTime = (time) =>
`${String(Math.floor(time / 60)).padStart(2, "0")}:${String(
time % 60
).padStart(2, "0")}`;
const Timer = ({ time }) => {
const timeRemain = RESET_INTERVAL_S - (time % RESET_INTERVAL_S);
return (
<>
<Text>{formatTime(timeRemain)}</Text>
</>
);
};
const IntervalTimerFunctional = () => {
const [time, setTime] = useState(0);
console.log("The time is", time);
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => t + 1);
}, 1000);
return () => clearInterval(timerId);
}, []);
return <Timer time={time} />;
};
return <IntervalTimerFunctional />;
};
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => t + 1);
}, 1000);
return () => clearInterval(timerId);
}, []);
您需要设置要重复的值。如果没有,这将继续重置它。
您还可以添加一个条件来检查计时器的值并停止它。像这样:
{
time !== 0 ? setTime((t) => t+1): time = 0;
}
我不确定这是一个完美的解决方案,但这可行:
您可以在计时器达到最大值时停止计时器:
useEffect(() => {
const timerId = setInterval(() => {
setTime((t) => {
if(t + 1 === RESET_INTERVAL_S) {
clearInterval(timerId)
}
return t + 1;
});
}, 1000);
return () => clearInterval(timerId);
}, []);
并在达到限制时显示“00:00”:
<Text>{time === RESET_INTERVAL_S ? "00:00" : formatTime(timeRemain)}</Text>
这是一个有效的 example