You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React分页逻辑优化:如何避免加载空白页面?

解决分页加载空白页问题

你的问题出在判断逻辑上:当返回的数据刚好是50条时,原代码会认为还有下一页并触发加载,但实际下一页没有数据,就出现了空白页。要解决这个问题,核心是判断当前返回的数据量是否小于请求的count值,如果小于,就标记为没有更多数据,停止加载下一页。

修改步骤

  • 增加状态标记是否还有更多数据,同时利用接口请求的加载状态避免重复请求
  • 根据接口返回的数据长度更新「是否还有更多数据」的状态
  • 调整滚动触发逻辑,只有满足「到底部、还有更多数据、未在加载」三个条件时,才加载下一页
  • 搜索条件变化时,重置分页状态,保证新搜索从第一页开始

修改后的代码示例

const [pageNumber, setPageNumber] = useState(0);
const [hasMore, setHasMore] = useState(true);

const vendors = useGetVendorsQuery({
  isSameDayRelease: sameDaySearch,
  region: selectedTab,
  name: vendorNameSearch,
  address: locationSearch,
  page: pageNumber,
  count: 50
});

// 数据返回后更新是否还有更多数据的状态
useEffect(() => {
  if (vendors.data) {
    // 只有当前页数据量等于count时,才认为还有下一页
    setHasMore(vendors.data.length === 50);
  }
}, [vendors.data]);

// 搜索条件变化时重置分页
useEffect(() => {
  setPageNumber(0);
  setHasMore(true);
}, [sameDaySearch, selectedTab, vendorNameSearch, locationSearch]);

const handleScroll = (e) => {
  const bottom = e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight;
  
  // 同时满足三个条件才加载下一页
  if (bottom && hasMore && !vendors.isLoading) {
    setPageNumber(prevPageNumber => prevPageNumber + 1);
  }
};

关键逻辑说明

  • setHasMore(vendors.data.length === 50):如果当前页返回满50条数据,说明可能还有下一页;如果小于50,直接标记为没有更多数据,停止后续加载。
  • 滚动触发时增加!vendors.isLoading判断:避免接口请求过程中重复触发分页,防止多次请求同一页数据。
  • 搜索条件变化时重置分页状态:保证新的搜索结果从第一页开始加载,同时重新允许加载下一页。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:31:05