【发布时间】:2021-04-06 19:34:34
【问题描述】:
我正在尝试使用 useEffect() 和 setInterval() 每 3 秒更改一次文本。现在它只更改一次文本,然后不再更改它。 我做错了什么?
编辑:我正在使用库“react-spring”
const [toggle, setToggle] = useState(false)
useEffect(() => {
setInterval(() => {
switch (toggle) {
case false: setToggle(true)
break;
case true: setToggle(false)
break;
}
}, 3000);
}, [])
{transitions.map(({ item, props }) => item
? <animated.div style={props}>Text that changes #1</animated.div>
: <animated.div style={props}>Text that changes #2</animated.div>)}
【问题讨论】:
-
您正在关闭 setInterval 回调中的
toggle状态,也许可以考虑使用 Dan 的 useInterval 钩子:overreacted.io/making-setinterval-declarative-with-react-hooks(或者可能是参考)。也值得看看昨天发布的this question 和。它的答案 -
尝试这样的事情:
useEffect(() => { setTimeout(() => setToggle(prevToggle => !prevToggle), 3000) }, [toggle]);超时函数每次都应该获得新的切换值 -
当我在 useEffect 函数末尾删除 [toggle] 时,它实际上起作用了。这是为什么?我认为它应该听切换变量来工作? @Jayce444
标签: javascript reactjs react-hooks use-effect