为什么setInterval函数不能正常工作?

亚历山德拉·马鲁西(Alexandra Marusii)

它不断显示错误消息,它是一个无限循环。我只是请求学习React,这是一个Clicker游戏。如何更改代码以使setInterval正常工作。谢谢(顺便说一句(顺便说一句,我不希望对代码进行任何其他更改都不会影响setInterval函数。是的,我已经在许多项目中使用过setInterval了,而且效果很好)。)

import "./styles.css";

export default function App() {
  let [num, setNum] = useState(0);
  let [add, setAdd] = useState(1);
  let [numC, setNumC] = useState(0);
  let [numCP, setNumCP] = useState(10);
  let [numW, setNumW] = useState(0);
  let [numWP, setNumWP] = useState(20)
  setInterval(setNum(num+=numW),3000);
  const click = () => {
    setNum((num += add));
  };
  const clicker = () => {
    if (num >= numCP) {
      setNumC((numC += 1));
      setNum((num -= numCP));
      setNumCP((numCP += 5));
      setAdd((add += 1));
    }
  };
  const worker = () => {
    if (num >= numWP) {
      setNumW((numW += 1));
      setNum((num -= numWP));
      setNumWP((numWP += 10));
    }

  };
  return (
    <div className="App">
      <h1>Clicker Game</h1>
      <div>
        {num}
        <button onClick={click}>Click</button>
      </div>
      <p />
      <div>
        {numC}
        <button onClick={clicker}>Buy({numCP})</button>
      </div>
      <div>
        {numW}
        <button onClick={worker}>Buy({numWP})</button>
      </div>
    </div>
  );
}```
加布里埃莱·彼得里奥利(Gabriele Petrioli)

有几个问题。

首先,setNum当要传递一个要在间隔过去时执行的回调时,您立即调用

所以 setInterval(() => setNum(num+=numW),3000);

但是现在有了第二个问题,每次重新渲染组件时,您都将启动一个附加间隔。并且它将至少在每次触发间隔回调时重新渲染很多

因此,您可能需要使用useEffect具有0依赖项的,因此如果要设置它并使其连续运行,它将运行一次。

useEffect(() => {
  setInterval(() => setNum(num += numW), 3000);
}, []);

但是现在您将遇到另一个问题。间隔中使用numnumW将被锁定为组件的第一个渲染中的值。

对于,num您可以使用的callback语法来解决它setNum

useEffect(() => {
  setInterval(() => setNum(currentNum => currentNum += numW), 3000);
}, []);

numW永远不会更新。

最终的工具是每次numWnum更改时重置间隔为此,您需要从useEffect执行清除的函数返回一个函数

useEffect(() => {
  const interval = setInterval(() => setNum(currentNum => currentNum += numW), 3000);
  return () => clearInterval(interval);
}, [numW]);

但这会有一个小问题,即间隔现在不固定,因为它会重置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么CAST()在MySQL函数中不能正常工作?

来自分类Dev

为什么preventDefault函数不能始终正常工作?

来自分类Dev

为什么 imshow 函数在 matlab 中不能正常工作?

来自分类Dev

为什么我的 parseFloat 函数不能正常工作?

来自分类Dev

为什么这个 UrlFetch 函数不能正常工作?

来自分类Dev

为什么 splice 函数在 JavaScript 中不能正常工作?

来自分类Dev

为什么在函数内部查询不能正常工作?

来自分类Dev

为什么setInterval无法正常工作?

来自分类Dev

为什么{{#each}}不能正常工作而{{#with}}不能正常工作?

来自分类Dev

为什么我的checkall函数可以工作,但是uncheckall函数不能正常工作

来自分类Dev

发现-exec不能正常工作,为什么?

来自分类Dev

为什么该查询不能正常工作?

来自分类Dev

为什么CSS Clear不能正常工作?

来自分类Dev

为什么“ if else语句”不能正常工作?

来自分类Dev

发现-exec不能正常工作,为什么?

来自分类Dev

为什么这个查询不能正常工作?

来自分类Dev

为什么“租金”方法不能正常工作?

来自分类Dev

为什么这行代码不能正常工作?

来自分类Dev

为什么自动收缩不能正常工作?

来自分类Dev

为什么我的代码不能正常工作?

来自分类Dev

为什么位操作不能正常工作

来自分类Dev

为什么 clearInterval() 不能正常工作?

来自分类Dev

为什么 RegExp Prototype 不能正常工作?

来自分类Dev

为什么我的 RegexExp 不能正常工作?

来自分类Dev

为什么我的 If 语句不能正常工作?

来自分类Dev

为什么 setOnChangeListener 不能正常工作?

来自分类Dev

为什么将这些宏函数转换为函数不能正常工作?

来自分类Dev

在React中,为什么我不能使用嵌套的箭头函数...虽然正常的函数似乎可以正常工作?

来自分类Dev

为什么在promise then子句中调用我的Sinn间谍函数不能正常工作?

Related 相关文章

  1. 1

    为什么CAST()在MySQL函数中不能正常工作?

  2. 2

    为什么preventDefault函数不能始终正常工作?

  3. 3

    为什么 imshow 函数在 matlab 中不能正常工作?

  4. 4

    为什么我的 parseFloat 函数不能正常工作?

  5. 5

    为什么这个 UrlFetch 函数不能正常工作?

  6. 6

    为什么 splice 函数在 JavaScript 中不能正常工作?

  7. 7

    为什么在函数内部查询不能正常工作?

  8. 8

    为什么setInterval无法正常工作?

  9. 9

    为什么{{#each}}不能正常工作而{{#with}}不能正常工作?

  10. 10

    为什么我的checkall函数可以工作,但是uncheckall函数不能正常工作

  11. 11

    发现-exec不能正常工作,为什么?

  12. 12

    为什么该查询不能正常工作?

  13. 13

    为什么CSS Clear不能正常工作?

  14. 14

    为什么“ if else语句”不能正常工作?

  15. 15

    发现-exec不能正常工作,为什么?

  16. 16

    为什么这个查询不能正常工作?

  17. 17

    为什么“租金”方法不能正常工作?

  18. 18

    为什么这行代码不能正常工作?

  19. 19

    为什么自动收缩不能正常工作?

  20. 20

    为什么我的代码不能正常工作?

  21. 21

    为什么位操作不能正常工作

  22. 22

    为什么 clearInterval() 不能正常工作?

  23. 23

    为什么 RegExp Prototype 不能正常工作?

  24. 24

    为什么我的 RegexExp 不能正常工作?

  25. 25

    为什么我的 If 语句不能正常工作?

  26. 26

    为什么 setOnChangeListener 不能正常工作?

  27. 27

    为什么将这些宏函数转换为函数不能正常工作?

  28. 28

    在React中,为什么我不能使用嵌套的箭头函数...虽然正常的函数似乎可以正常工作?

  29. 29

    为什么在promise then子句中调用我的Sinn间谍函数不能正常工作?

热门标签

归档