javascript - 在react中使用setInterval的增量值被破坏

标签 javascript reactjs

function App() {
  const [tick, setTick] = useState(0);
  useEffect(() => {
    setInterval(() => {
      setTick(tick + 1);
    }, 1000);
  }, [tick]);

  return (
    <div className="App">
      <h1>{tick}</h1>
    </div>
  );
}

结果每秒增加超过 1,一开始还有效,后来就开始困惑了。查看演示 https://codesandbox.io/s/eloquent-kepler-vvzr7

最佳答案

因为每次更新tick时,效果都会触发并启动另一个计时器...该效果不应依赖于tick:

 useEffect(() => {
    let id = setInterval(() => {
      setTick(tick => tick + 1); // No dependency anymore
    }, 1000);

    // This has nothing todo with your problem, but I encourage you to correctly clean up effects:
    return () => clearInterval(id);
 }, []); // <<

关于javascript - 在react中使用setInterval的增量值被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59281520/

相关文章:

javascript - 突出显示一个元素(或字符)但实际上复制了一个不同的词

javascript - react 结合不同的包装器

javascript - 获取选项卡 ID 或 URL 并使用 getCurrent 显示它

reactjs - React-stripe-elements CardElement 抛出跨源错误

javascript - 无法在Reactjs中加载js文件

ios - 错误 React Native IOS 异常 '-[__NSDictionaryM 长度] : unrecognised selector sent to

javascript - 在 React 中设置状态的多个 Fe​​tch 请求

javascript - 避免Ajax回调 hell "Nesting"

javascript - React 何时以及以什么顺序更新 DOM?

javascript - 无法读取未定义的属性 'string' | React.PropTypes | React.PropTypes | LayoutPropTypes.js