tab页面切换
在做tab的切换,一个是已读tab(展示已读列表)一个是未读的tab(展示未读列表),每次点击一个tab的时候都要去发送请求去获取信息,当快速切换按钮的时候会发发生什么问题?
在快速切换 “已读” 和 “未读” Tab 时,可能会出现以下问题:
- 请求竞态问题(Race Condition)
如果网络请求的返回顺序与切换顺序不一致,可能导致 UI 显示错误的数据。例如:
用户先点击 “未读”(请求 A 发送),紧接着快速点击 “已读”(请求 B 发送)。
如果请求 A 比请求 B 返回得慢,那么 UI 可能最终展示的是 “未读” 的数据,而当前 Tab 显示的是 “已读”,导致数据错乱。
- 重复请求,浪费资源
每次切换都重新请求数据,可能会导致短时间内大量无效的请求,影响服务器性能,同时也会增加前端的负担。
- 闪烁和加载状态异常
如果每次请求都触发加载状态(如 loading spinner),快速切换时 UI 可能会出现不断闪烁的情况,影响用户体验。
如何优化?
- 取消无效请求
使用 AbortController(在 fetch 里使用)。
在 Axios 里使用 取消请求(axios.CancelToken 或 abortController)。
例如:
let abortController =