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

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;
      });
    },
相关推荐
云飞云共享云桌面3 分钟前
佛山某机械加工设备工厂10个SolidWorks共享一台服务器的软硬件
大数据·运维·服务器·前端·网络·人工智能·性能优化
开发者小天6 分钟前
React中使用classnames的案例
前端·react.js·前端框架
简单的话*13 分钟前
Logback 日志按月归档并保留 180 天,超期自动清理的配置实践
java·前端·python
困惑阿三16 分钟前
深入理解 JavaScript 中的(Promise.race)
开发语言·前端·javascript·ecmascript·reactjs
我命由我1234518 分钟前
微信小程序 bind:tap 与 bindtap 的区别
开发语言·前端·javascript·微信小程序·小程序·前端框架·js
5335ld22 分钟前
vue2 直播地址播放 兼容浏览器
前端·vue.js
克喵的水银蛇23 分钟前
Flutter 布局实战:掌握 Row/Column/Flex 弹性布局
前端·javascript·flutter
哆啦A梦158829 分钟前
60 订单页选择收货地址
前端·javascript·vue.js·node.js
馬致远37 分钟前
案例1- 跳动的心
javascript·css·css3
Hilaku38 分钟前
利用 link rel="prefetch":如何让用户的页面秒开?
前端·javascript·性能优化