如果与 setInterval 一起使用,请输入 useRef,react-typescript
type for useRef if used with setInterval, react-typescript
我正在 next.js 应用程序中制作一个简单的动画。
let flipInterval = useRef();
const startAnimation = () => {
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
};
对于 flipInterval.current
我收到“类型 'Timeout' 不可分配给类型 'undefined'”。所以我检查了如何使用超时类型,我看到人们正在使用但那不起作用。
let flipInterval = useRef<typeof window.settimeout>();
我也传递了数字 useRef<number>()
这次我得到“类型 'Timeout' 不可分配给类型 'number'”
这也不起作用
let flipInterval = useRef<typeof window.setInterval>();
您需要传递 setInterval
的正确 return 值类型。为此用途 ReturnType
:
const flipInterval = useRef<ReturnType<typeof setInterval>>(null)
let flipInterval = useRef<number | null>(null);
const startAnimation = () => {
flipInterval.current = window.setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
};
/* way of clear interval */
window.clearInterval(flipInterval.current || 0);
您需要使用NodeJS.Timeout
类型:
let flipInterval = useRef<NodeJS.Timeout>()
const startAnimation = () => {
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping)
}, 10000)
}
如果你正在去抖并需要清除超时null
需要处理
由于问题的标题,这可能会对其他人有所帮助。
const flipInterval:{current: NodeJS.Timeout | null} = useRef(null)
const startAnimation = () => {
flipInterval.current && clearTimeout(scrollTimeout.current);
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping)
}, 10000)
}
const intervalRef: { current: NodeJS.Timeout | null } = useRef(null);
const startAnimation = () => {
const id = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
intervalRef.current = id;
};
const clear = () => {
clearInterval(intervalRef.current as NodeJS.Timeout);
};
我是如何使用的
*最好设置useRef的initialValue。这就是为什么 null.
const timeout = useRef<NodeJS.Timeout | null>(null);
timeout.current = setTimeout(() => someAction()), 500);
useEffect(() => {
return () => clearTimeout(timeout.current as NodeJS.Timeout);
}, []);
我正在 next.js 应用程序中制作一个简单的动画。
let flipInterval = useRef();
const startAnimation = () => {
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
};
对于 flipInterval.current
我收到“类型 'Timeout' 不可分配给类型 'undefined'”。所以我检查了如何使用超时类型,我看到人们正在使用但那不起作用。
let flipInterval = useRef<typeof window.settimeout>();
我也传递了数字 useRef<number>()
这次我得到“类型 'Timeout' 不可分配给类型 'number'”
这也不起作用
let flipInterval = useRef<typeof window.setInterval>();
您需要传递 setInterval
的正确 return 值类型。为此用途 ReturnType
:
const flipInterval = useRef<ReturnType<typeof setInterval>>(null)
let flipInterval = useRef<number | null>(null);
const startAnimation = () => {
flipInterval.current = window.setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
};
/* way of clear interval */
window.clearInterval(flipInterval.current || 0);
您需要使用NodeJS.Timeout
类型:
let flipInterval = useRef<NodeJS.Timeout>()
const startAnimation = () => {
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping)
}, 10000)
}
如果你正在去抖并需要清除超时null
需要处理
由于问题的标题,这可能会对其他人有所帮助。
const flipInterval:{current: NodeJS.Timeout | null} = useRef(null)
const startAnimation = () => {
flipInterval.current && clearTimeout(scrollTimeout.current);
flipInterval.current = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping)
}, 10000)
}
const intervalRef: { current: NodeJS.Timeout | null } = useRef(null);
const startAnimation = () => {
const id = setInterval(() => {
setIsFlipping((prevFlipping) => !prevFlipping);
}, 10000);
intervalRef.current = id;
};
const clear = () => {
clearInterval(intervalRef.current as NodeJS.Timeout);
};
我是如何使用的
*最好设置useRef的initialValue。这就是为什么 null.
const timeout = useRef<NodeJS.Timeout | null>(null);
timeout.current = setTimeout(() => someAction()), 500);
useEffect(() => {
return () => clearTimeout(timeout.current as NodeJS.Timeout);
}, []);