代码在这里:https : //codesandbox.io/s/nw4jym4n0
export default ({ name }: Props) => {
  const [counter, setCounter] = useState(0);
  useEffect(() => {
    const interval = setInterval(() => {
      setCounter(counter + 1);
    }, 1000);
    return () => {
      clearInterval(interval);
    };
  });
  return <h1>{counter}</h1>;
};
问题是每个setCounter触发器都重新渲染,因此间隔被重置并重新创建。这可能看起来不错,因为状态(计数器)不断增加,但是当与其他钩子结合时它可能会冻结。
这样做的正确方法是什么?在类组件中,使用一个实例变量来保存间隔很简单。