看到useLatest的实现,为啥给useLatest的入参价格value的state, value本质就是一个值变化的值。 然后value变化它会变化?因为每次state变化会重新渲染,带着新的state重新执行组件函数,执行到useLatest的时候,ref.current = newState 。执行了这个赋值。就是这样。

下面有一些demo尝试
代码

然后尝试点+1或-1。实际页面效果

首次加载

点+1

点多次+1,可以看到countRef.current没变
然而每次点击+1或者-1countRef的值始终是0, 因为没有执行countRef.current = count的赋值操作。
稍微修改一下代码

然后尝试点+1或-1。实际页面效果

首次加载

点击+1

多次点击+1
这就是为啥useLatest可以避免闭包的问题的原因了。count变化,执行代码会把变化的值赋值给countRef.current。使得最新的count被countRef所存储。