在前端开发中,如何处理列表分页时遇到接口延迟或数据返回顺序不一致的问题

1. 加载状态指示

在发送请求时,设置一个加载状态(例如 isLoading),告诉用户正在加载数据。当收到数据后,再更新状态。

2. 取消上一个请求

在发送新的请求之前,可以取消之前的请求。使用像 Axios 的 CancelToken 可以帮助你做到这一点。

3. 保持数据一致性

在每次请求时,保存当前请求的页码,并在数据返回时检查这个页码。只有当返回的数据页码与当前请求的页码一致时,才更新视图。

复制代码
fetchData(page) {
      this.currentPage = page;
      
      // 取消上一个请求
      if (this.cancelTokenSource) {
        this.cancelTokenSource.cancel("Operation canceled due to new request.");
      }

      this.isLoading = true;

      // 创建一个新的取消令牌
      this.cancelTokenSource = axios.CancelToken.source();

      axios.get(`/api/data?page=${this.currentPage}`, {
        cancelToken: this.cancelTokenSource.token,
      })
      .then(response => {
        // 仅在请求的页面与当前页面一致时更新数据
        if (response.data.page === this.currentPage) {
          this.items = response.data.items;
        }
      })
      .catch(error => {
        if (axios.isCancel(error)) {
          console.log("Request canceled:", error.message);
        } else {
          console.error("Error fetching data:", error);
        }
      })
      .finally(() => {
        this.isLoading = false;
      });
    },
相关推荐
freewlt3 分钟前
企业级前端性能监控体系:从Core Web Vitals到实时大盘实战
前端
研☆香4 分钟前
聊聊什么是AJAX
前端·ajax·okhttp
Freak嵌入式6 分钟前
无硬件学LVGL:基于Web模拟器+MiroPython速通GUI开发—布局与空间管理篇
前端
Southern Wind11 分钟前
我在 Vue3 项目里接入 AI 后,发现前端完全变了
前端·人工智能·状态模式
Bigger12 分钟前
我手搓了一个开源版 Claude Code (mini-cc)
前端·ai编程·claude
qq43569470116 分钟前
JavaWeb03
前端·css·html
Alice-YUE18 分钟前
ai对话平台流式响应输出怎么实现?
前端·笔记·ai·语言模型
一个public的class22 分钟前
前后端 + Nginx + Gateway + K8s 全链路架构图解
前端·后端·nginx·kubernetes·gateway
胡志辉的博客26 分钟前
网络七层到底怎么落到一次前端请求上:从浏览器到网卡,再到远端服务器
服务器·前端·网络
小比特_蓝光28 分钟前
从环境变量到进程地址空间:Linux系统学习笔记
前端·chrome