【发布时间】:2020-08-22 00:40:40
【问题描述】:
我的组件是:
export default function TopHalf(props) {
const [startDegrees, setStartDegrees] = useState(0)
useEffect(() => {
const centerPoint = { x: dim.width / 2, y: dim.height / 4 }
setCenter(centerPoint)
setInterval(() => {
console.log('startDegrees', startDegrees)
setStartDegrees(startDegrees + 5)
}, 500)
}, [])
...
return (
<HalfView style={{ top: 0, position: 'absolute', width: '100%' }} >
{props.participants?.map(circularParticipants)}
</HalfView>
)
}
所以你可以看到startDegrees 应该每半秒增加一次5。但是当我注销它时,它会停留在0。
【问题讨论】:
-
只是让你知道,我没有对你投反对票。
-
this article 很好地解释了发生的事情。基本上 startDegrees 是一个陈旧的闭包,如果您仔细检查 startDegrees 如何通过闭包可用以及闭包如何工作,那么您可以理解为什么您创建的内容不起作用。您可以通过将回调传递给 setStartDegrees 并执行
setStartDegrees(current=>current + 5)或更好的方法来修复它;将 setStartDegrees 设置为效果的依赖项,并设置一个可以在效果清理函数中清除的 setTimeout。
标签: javascript reactjs react-native react-hooks use-effect