React中连续调用Setter方法时执行顺序是否有保障?
关于React连续调用状态Setter的执行顺序问题
首先直接给出结论:当condition为true时,最终的formSubType状态一定是obj.someProperty这个非空值,但原因不是“第二个Setter调用在第一个之后完成”,而是React对同步代码块中的状态更新做了批量合并处理。
你给出的示例代码里,两次setFormSubType调用都处于同一个同步执行的then回调函数中:
fetch("...") .then(res => res.json()) .then(data => { //... setFormSubType(""); //... if (condition) { setFormSubType(obj.someProperty); } })
React的状态Setter本身确实是异步的——调用Setter后不会立刻更新组件状态,但在同步执行的代码块里,React会把多次状态更新请求加入队列,最后只执行最后一次有效的更新(针对同一个状态的多次设置,后面的会覆盖前面的)。
也就是说,这段代码里的两次setFormSubType调用,React会合并处理:不管第一个空字符串的更新有没有被处理,最终都会用第二个obj.someProperty的值来更新状态。所以只要condition为true,最终状态一定是非空的obj.someProperty。
补充说明:如果这两次Setter调用是在不同的异步上下文里(比如第一个在setTimeout里,第二个在外面),那React不会批量处理,这时候才需要考虑顺序问题,但你的场景里不存在这种情况。
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

