众说纷纭,我认可的观点是setState是同步的,但是是延迟执行的。在React声明周期以及绑定的事件流中,所有的setState操作会先缓存到一个队列中,在整个事件结束之后或者mount流程结束后才会去除队列进行依次计算,触发state更新。只要我们跳出React的生命周期或者事件流,比如放在一个setTimeout中,那么就能打破React对setState的掌控,在里面会发现,setState完全跟同步代码一样。
为什么看起来像异步呢?是因为我们在React的事件流中执行的时候,会发现setState总是在同步代码之后执行,但是,我们又会发现,它的执行总是优先于微任务和宏任务
useState 和 setState 是一样的,区别在于连续执行两次同一个useState,useState会对state逐个处理,也就是说加了两遍,那就加2,只是最后才渲染结果而已。而连续执行两次同一个setState,只会处理最后一个,也就是说,加了两遍,只会加1