javascript - react : Updated state not reflecting in recursive useCallback

标签 javascript reactjs typescript redux react-hooks

我正在递增 foo使用回调 Hook 称为 递归 .但是,增加的 foo不会反射(reflect)在回调中。

const { useState, useCallback } = React;

const App = () => {
  const [foo, setFoo] = useState(0);

  const recursiveCallback = useCallback(() => {
    // always logs 0
    console.log(foo);

    // incrementing foo
    setFoo(foo + 1);

    setTimeout(() => {
      // recursive call
      recursiveCallback();
    }, 250);
  }, [foo]);

  return <button onClick={recursiveCallback}>Click Me</button>;
}

ReactDOM.render(<App />,document.getElementById('root'));
<div id="root"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>

最佳答案

你有一个 closurefoo===0在日志和 setter 函数中的值,要修复它,您需要使用 functional updateuseEffect用于记录:

const { useState, useCallback, useEffect } = React;

const App = () => {
  const [foo, setFoo] = useState(0);

  const recursiveCallback = useCallback(() => {
    setFoo(prev => prev + 1);

    setTimeout(() => {
      recursiveCallback();
    }, 250);
  }, [foo]);

  useEffect(() => {
    console.log(foo);
  }, [foo]);

  return <button onClick={recursiveCallback}>Click Me</button>;
}

ReactDOM.render( < App/> , document.getElementById('root'));
<div id="root"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>

关于javascript - react : Updated state not reflecting in recursive useCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65788812/

相关文章:

javascript - 函数链不工作 Angular 5

javascript - 我怎样才能让 Greasemonkey 突出显示访问过的图像链接?

javascript - AJAX 回调中变量值错误

javascript - 我应该在任何地方使用 React.PureComponent 吗?

ios - React-Native 远程调试器无法在 iPhone 上运行

cordova - 如何添加Ionic2原生按钮点击音效?

node.js - Azure Web App不启动 Node 服务器

javascript - 在 Vuejs 中从 child 到 parent 的事件监听

javascript - 从 GeoJson 文件获取单独的 Lat 和 Lng 值

javascript - Webpack 不提供 React 生产构建