什么是capture value?

685 阅读1分钟

capture value 直译过来叫捕获值,也可以说是固定的值。指的是在react hooks中的某一个state虽然发生改变后,我们现在拿到的还是原先的值,这样解释起来不太清晰,我们来看一个例子:

function Demo() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const timer = setTimeout(() => {
      console.log(count)
    }, 3000);
    return () => {
      clearTimeout(timer);
    }
  }, [])

  return (
    <button
      onClick={() => setCount(c => c + 1)}
    >
      click
    </button>
  )
}

当页面渲染之后,我们点击按钮,是count增加,但是3秒钟之后打印出来的count还是0,并没有改变,这种现象就是capture value特性。

为什么会出现这种现象呢?

react在初次渲染的时候,是指了setTimeout函数,把里面的函数放在异步队列里面,待3秒钟之后再执行,此时count的状态值为0,而后面执行setCount之后,再次刷新页面,然后useEffect hook 里面的函数因为没有依赖更新不会再执行,跟useEffect无关,所以,这里面函数的状态也不会改变,3秒之后count打印出来还是原先的值。