在这种情况下如何清除超时?
代码:
const [flag, setFlag] = useState<boolean>(false);
const timerFlag = useRef<null | ReturnType<typeof setTimeout>>(null);
const handlePressCancel2 = () => {
timerFlag.current = setTimeout(() => {
setFlag(true)
}, 150);
}
回答1
如果要在销毁组件时清除超时,则必须为此使用 useEffect
:
const [flag, setFlag] = useState<boolean>(false);
const timerFlag = useRef<null | ReturnType<typeof setTimeout>>(null);
const handlePressCancel2 = () => {
timerFlag.current = setTimeout(() => {
setFlag(true);
}, 150);
};
useEffect(() => {
return () => {
if (timerFlag.current) {
clearTimeout(timerFlag.current);
}
};
}, []);
回答2
尝试做一个return清除定时return() => clearTimeout(handlePressCancel2)