如何在 ReactJS 钩子中添加计时器
how to add timer in ReactJS hooks
我正在尝试添加计时器,
问题陈述 - 当用户点击按钮时,它应该调用定时器来启动并在 3 秒后它应该执行一些事情。
我的代码不起作用
const [timer, setTimer] = useState(3);
useEffect(() => {
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
} else {
window.close();
}
}, [timer]);
function submitStartTimer(){ /*Button onClick=submitStartTimer()*/
setTimer(3);
swal({
title: "Thank You!",
text:
"You have successfully Submitted your Data! This tab is going to close!",
icon: "success",
button: false,
});
}
但是选项卡在 3 秒后自动关闭,我知道是因为 useEffect,但是我如何在单击 submitStartTimer() 后启动 useEffect?
const [timer, setTimer] = useState(0);
您只需要从 0 开始计时。由于您从 3 开始计时,因此 useEffects
开始并从一开始就不断减少计时器,因为:
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
}
由于 [timer] 已作为依赖项传递,每当它发生变化时,都会调用 useEffects
,因此您会看到这种行为。您已经使用过:
setTimer(3)
在你的提交方法中,这样应该可以工作,只要你这样做:const [timer, setTimer] = useState(0);
另一种解决方案可能是从 useEffects
中的依赖项中删除 [timer]
并保留它 [].
我得到了解决方案,通过使用 Rahul 的答案稍作修改帮助我解决了它。
const [timer, setTimer] = useState(-1);
useEffect(() => {
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
} else if (timer === 0) {
window.close();
}
}, [timer]);
function submitStartTimer(){
setTimer(3);
swal({
title: "Thank You!",
text:
"You have successfully Submitted your Data! This tab is going to close!",
icon: "success",
button: false,
});
}
我正在尝试添加计时器, 问题陈述 - 当用户点击按钮时,它应该调用定时器来启动并在 3 秒后它应该执行一些事情。
我的代码不起作用
const [timer, setTimer] = useState(3);
useEffect(() => {
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
} else {
window.close();
}
}, [timer]);
function submitStartTimer(){ /*Button onClick=submitStartTimer()*/
setTimer(3);
swal({
title: "Thank You!",
text:
"You have successfully Submitted your Data! This tab is going to close!",
icon: "success",
button: false,
});
}
但是选项卡在 3 秒后自动关闭,我知道是因为 useEffect,但是我如何在单击 submitStartTimer() 后启动 useEffect?
const [timer, setTimer] = useState(0);
您只需要从 0 开始计时。由于您从 3 开始计时,因此 useEffects
开始并从一开始就不断减少计时器,因为:
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
}
由于 [timer] 已作为依赖项传递,每当它发生变化时,都会调用 useEffects
,因此您会看到这种行为。您已经使用过:
setTimer(3)
在你的提交方法中,这样应该可以工作,只要你这样做:const [timer, setTimer] = useState(0);
另一种解决方案可能是从 useEffects
中的依赖项中删除 [timer]
并保留它 [].
我得到了解决方案,通过使用 Rahul 的答案稍作修改帮助我解决了它。
const [timer, setTimer] = useState(-1);
useEffect(() => {
if (timer > 0) {
setTimeout(() => setTimer(timer - 1), 1000);
} else if (timer === 0) {
window.close();
}
}, [timer]);
function submitStartTimer(){
setTimer(3);
swal({
title: "Thank You!",
text:
"You have successfully Submitted your Data! This tab is going to close!",
icon: "success",
button: false,
});
}