useEffect 一直在重新渲染

时间:2021-02-11 11:09:02

标签: reactjs use-effect


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

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

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

谢谢anaone 能帮上忙!!

1 个答案:

答案 0 :(得分:2)

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

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