难度级别:中高级及以上 提问概率:70%
在React项目中,使用setState可以更新状态数据,而不能直接使用为this.state赋值的方式。而为了避免重复更新state数据,React首先将state添加到状态队列中,此时我们可以通过shouldComponentUpdate这个钩子函数在一定程度上决定是否需要更新组件。所以是不能在shouldComponentUpdate钩子函数内使用setState来更新state的,这样程序会继续调用updateComponent方法,而updateComponent又继续调用shouldComponentUpdate,从而导致状态更新死循环,这一点开发者需要注意。
很多人认为setState是异步的,这本没有错。从开发角度来说,如果上一行代码做了赋值操作,下一行代码未能及时拿到赋值结果,其实都可以算作是异步的,因为代码执行本身也是需要时间的,哪怕只是一行简单的Javascript代码。但考虑到这道面试题,求职者就需要从队列以及事件角度来回答了。
更新state数据的过程中,有一个非常重要的变量isBatching