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

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;
      });
    },
相关推荐
lerhxx几秒前
我用 R3F 手搓了一个能走进去的 3D 迷宫简历(上):从选型架构到迷宫生成算法
前端·javascript·three.js
还有多久拿退休金4 分钟前
不调多模态,纯文本大模型如何给系统操作配上截图
前端·llm·aigc
hunterandroid1 小时前
HarmonyOS WebSocket 实战:断线重连、心跳保活与连接状态机设计
前端
hunterandroid1 小时前
StateFlow 与 SharedFlow 的边界:状态与事件的正确建模
android·前端
心念科技1 小时前
1、搜索表单 xnSearch(基于:心念后台,后端 Java 21 + Spring Boot 4 + Spring Cloud,前端提供 ReactVue3+TS、Vue3+JS、Vue2+JS
前端
计算机魔术师2 小时前
Dwarkesh Patel 对 OpenAI/Hugging Face 事件的爆款解读被指危险误导
前端
自进化Agent智能体3 小时前
Hermes GitHub PR 审查 —— 自动化代码评审
前端
涛涛ing5 小时前
OpenAI Astra 泄露:零样本生成 3D 网页,前端开发者慌了吗?
前端
ssshooter5 小时前
现在网页都能提供 MCP 了?!
前端·人工智能·程序员
杉氧5 小时前
状态管理变迁史:为什么我们放弃了 Redux 选择 Zustand?
android·前端·react native