reactjs - useEffect 一直在重新渲染
问题描述
我已经在这里发布了关于我创建太空入侵者类型游戏的卑微尝试的问题!
这次我每次发射激光时都遇到了useEffect重新渲染的问题,导致每次我击中射击时都会再次启动setintervall,然后我的激光越来越快!解决方案是将我的 setInterval 放在其他地方,还是在 useEffect 上工作,以便在我拍摄激光时它不会渲染?这是我更新的沙箱:
https://codesandbox.io/s/mfcqd?file=/src/MainGameContainer.jsx
我猜问题在于'./src/gameElements/lasers.jsx',它是函数开始时的useEffect,每次我拍摄时都会持续渲染。
如果anaone可以提供帮助,谢谢!
解决方案
您必须在 useEffect 清理中清除间隔,否则当组件重新渲染时,旧间隔仍然存在:
useEffect(() => {
let timing = setInterval(moveLasers, 30);
return () => clearInterval(timing);
});
推荐阅读
- python - 从 Python 运行的 VBA 弹出窗口中选择一个文件夹
- sql - 从另一个表 SQL 中选择最近的日期
- racket - 在 Racket 中使用 eval 编写代码的替代方法
- javascript - 如何在动漫js中管理动画顺序
- python - 在 Tkinter 中使用变量值 - AttributeError: 'unicode' object has no attribute 'tk'
- powershell - 请你指点我一个Powershell,鼠标教程
- python - 如何通过熊猫数据框中的值组找到 n 个最大值的总和?
- c# - 如何从.net中的字节数组解析STUN消息
- java - 整数数组的除法和求和
- java - 如何手动验证 EditText?