首页 > 解决方案 > useEffect 一直在重新渲染

问题描述


我已经在这里发布了关于我创建太空入侵者类型游戏的卑微尝试的问题!
这次我每次发射激光时都遇到了useEffect重新渲染的问题,导致每次我击中射击时都会再次启动setintervall,然后我的激光越来越快!解决方案是将我的 setInterval 放在其他地方,还是在 useEffect 上工作,以便在我拍摄激光时它不会渲染?这是我更新的沙箱:

https://codesandbox.io/s/mfcqd?file=/src/MainGameContainer.jsx

我猜问题在于'./src/gameElements/lasers.jsx',它是函数开始时的useEffect,每次我拍摄时都会持续渲染。

如果anaone可以提供帮助,谢谢!

标签: reactjsuse-effect

解决方案


您必须在 useEffect 清理中清除间隔,否则当组件重新渲染时,旧间隔仍然存在:

  useEffect(() => {
    let timing = setInterval(moveLasers, 30);
    return () => clearInterval(timing);
  });

推荐阅读