什么是前端请求竞态问题
前端请求竞态问题是指:在用户频繁触发数据请求(如搜索、切换筛选条件等)时,多个异步请求可能同时进行,导致后发请求的结果比先发请求更晚返回,最终页面显示了过时的数据。
举例:用户快速输入搜索框,连续发起多次请求。如果第一个请求最后才返回,页面会显示第一个请求的数据,而不是最新输入对应的数据。这会造成数据展示不准确、用户体验差。
SWR是如何解决前端请求竞态的问题
SWR 通过"请求标识"和"最新请求优先"机制解决前端请求竞态问题。每次请求都会生成唯一的 key(如 genKey),只有最后一次请求的结果会被渲染到页面。即使前面的请求晚于后面的请求返回,SWR 也会忽略旧请求的数据,确保页面始终展示最新请求的结果,从而避免数据错乱。
SWR解决前端请求竞态的源码


执行分析

- startAt 是一个闭包变量,每一个请求都会有自己的startAt(唯一时间戳);
- FETCH是一个对象,相同key的后一次请求都会覆盖前一个请求存储在
FETCH[key][1]
中的startAt, 所以FETCH[key][1]
中永远都是最后一次请求的startAt。 - 通过对比
FETCH[key][1]
和闭包变量startAt 可以筛选出最后一次请求。