我的组件中包含以下代码:
setPosition(-0.08)
调用setState开始反弹效果setTimeout
,并在350ms后调用setPosition(0)
。function changeImage(dir) {
const isBouncing = useRef(false);
const bounceTimeout = useRef(null);
// ... some other code
if (dir === 'LEFT' && selected === 0) {
isBouncing.current = true;
setPosition(-0.08);
bounceTimeout.current = setTimeout(()=> {
isBouncing.current = false;
setPosition(0);
}, 350);
return;
}
}
它按预期工作!
问题
我是否有任何理由不应该这样做(从
setState
)?
答案 0 :(得分:1)
您可以从setState
呼叫setTimeout
。例如,这就是实现动画的方法之一。
但是在您的情况下,您应该将代码移到useEffect
钩子上,否则可能会导致副作用。
并且您还需要清除卸载超时
useEffect(() => {
return () => {
if (bounceTimeout.current !== null) {
clearTimeout(bounceTimeout.current)
}
}
}, [])