为什么useState setter在useeffect间隔函数中不起作用

问题描述 投票:0回答:1

经典示例,不清楚为什么具有直接值的 setter 不起作用 setCount(count+1) 应用程序仅包含 1 并停止计数,但是如果我们放置日志我们可以看到它,则每秒都会调用间隔函数。

const { useState, useEffect } = React;

const Counter = () => {
  const [count, setCount] = useState(0);
  useEffect(() => {
    const id = setInterval(() => setCount(count+1), 1000);
    // this set count works
    // const id = setInterval(() => setCount(c => c + 1), 1000);

    return () => clearInterval(id);
  }, []);

  return <div>{count}</div>;
};

ReactDOM
  .createRoot(root)
  .render(<Counter/ >);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.3.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.3.1/umd/react-dom.production.min.js"></script>

<div id="root"></div>

reactjs react-hooks
1个回答
0
投票

间隔效果很好。问题是 useEffect 箭头函数中捕获的

count
的值对于每次调用都具有相同的 0 值。

© www.soinside.com 2019 - 2024. All rights reserved.