reactjs 中的陈旧闭包,为什么在 setTimeout 函数中不调用钩子

时间:2021-07-21 21:46:06

标签: javascript reactjs

我不知道为什么会出现这些结果。 这是我的代码。

import React, { useState } from "react";

export function Main() {
  const [val, setVal] = useState(0);

  const onClosure = () => {
    setTimeout(() => {
      console.log(`before = ${val}`);
      setVal(val + 1);
      console.log(`inside = ${val}`);
    }, 1000);
  };
  
  console.log(`outside = ${val}`);
  return (
    <React.Fragment>
      <div>{val}</div>

      <div>hi!!</div>
      <div>good</div>
      <button onClick={onClosure}>click me</button>
    </React.Fragment>
  );
}

在过时的关闭问题中,当我非常快速地多次单击按钮时,总是只有 2 次重新渲染工作,但是 setTimeout() 中的内部语句被正确调用。我不知道为什么。请澄清这个问题..谢谢!!

这是我的结果img(我看不懂):

result.png

0 个答案:

没有答案