javascript - 为什么我的 setState 不能使用带有 react-native 的 useEffect 在 setInterval 中更新?
问题描述
我的组件是:
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
当我注销它时它会停留在。
解决方案
从反应文档:
将 setState() 视为更新组件的请求而不是立即命令。为了更好地感知性能,React 可能会延迟它,然后一次更新多个组件。React 不保证立即应用状态更改。
https://reactjs.org/docs/react-component.html#setstate
在这种情况下,react 可能没有更新状态,因此日志正在读取原始值。为避免 setState 的并发问题,您可以将回调作为第二个参数传递,该参数在 setState 执行时调用。这样,它总是会在更新之前直接获取值。
上面的链接中有更多信息。希望这可以帮助!
推荐阅读
- javascript - 多个(动态)元素的 createRef
- python - 查看海龟 circle() 绘图中使用的所有坐标
- javascript - 如何在node js中解析和读取html中的数据
- python-3.x - 如何设置环境“ORA_OCI_NO_OPTIMIZED_FETCH”?
- jquery - 使用 jquery 查找具有特定样式的 tr 标签
- java - 如何用maven删除包
- firebase - 仅限 Firebase 托管的公共图像
- amazon-web-services - 当密钥包含阿拉伯字符时,AWS Golang 开发工具包无法复制对象
- json - 在 python 中解析 Alexa json 响应以获取值名称时出现问题
- django - 如何从我的 serializer.py 文件访问任何特定字段?