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

react-js-pagination筛选后分页异常:点击页码返回未筛选数据求助

问题分析与修复方案

我帮你排查了代码里的核心问题,主要是分页切换时没带上筛选条件,还有几处小错误,咱们一步步来修复:

1. 分页切换时未携带筛选条件

你当前的handlePageChange函数里,调用getTableListData只传了页码和每页条数,完全没用到当前选中的国家筛选值,所以切换页码时接口请求的是全部原始数据,自然就回到未筛选状态了。

修改handlePageChange函数,把当前的selectCountry也传给接口:

handlePageChange = pageNumber => {
  let pNum = pageNumber || 1;
  this.setState({ activePage: pNum });
  // 带上当前的筛选条件:selectCountry
  getTableListData(pNum, this.state.pageSize, "", this.state.selectCountry)
    .then(response => this.getTableData(response));
};

2. 筛选函数里的拼写错误+页码重置

在handleCountryChange里,你写了this.getTableData(countryWiseSchool),但countryWiseSchool根本没定义,应该是response,这会导致筛选后数据无法正确更新。同时,筛选时应该把页码重置为1,避免出现页码超出筛选后数据总页数的异常情况:

修改handleCountryChange函数:

handleCountryChange = val => {
  // 筛选时强制重置页码到第一页
  this.setState({ 
    selectCountry: val,
    activePage: 1 
  }, () => {
    // 用setState的回调确保状态更新后再请求接口
    let searchSchool = "";
    getTableListData(this.state.activePage, this.state.pageSize, searchSchool, val)
      .then(response => {
        this.getTableData(response); // 修复未定义变量的问题
      });
  });
};

这里用setState的回调是因为它是异步操作,回调里才能确保拿到最新的activePage和selectCountry值,避免请求参数错误。

3. 空筛选条件的逻辑优化

原来的else分支可以合并到统一逻辑里,让代码更简洁:

handleCountryChange = val => {
  this.setState({ 
    selectCountry: val,
    activePage: 1 
  }, () => {
    let searchSchool = "";
    // 无论筛选条件是否为空,统一调用接口
    getTableListData(this.state.activePage, this.state.pageSize, searchSchool, val || "")
      .then(response => {
        this.getTableData(response);
      });
  });
};

4. 确认分页组件的总条数更新

你的getTableData函数已经在更新total状态,这部分是正确的——只要接口返回的Total是筛选后的总条数,分页组件就能根据total和pageSize自动计算总页数,显示正常的分页按钮。

最终关键代码片段

handlePageChange = pageNumber => {
  let pNum = pageNumber || 1;
  this.setState({ activePage: pNum });
  getTableListData(pNum, this.state.pageSize, "", this.state.selectCountry)
    .then(response => this.getTableData(response));
};

handleCountryChange = val => {
  this.setState({ 
    selectCountry: val,
    activePage: 1 
  }, () => {
    let searchSchool = "";
    getTableListData(this.state.activePage, this.state.pageSize, searchSchool, val)
      .then(response => {
        this.getTableData(response);
      });
  });
};

这样修改后,筛选完再切换页码,接口会带上当前的国家筛选条件,返回的就是对应筛选后的分页数据,不会再回到原始数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:43:50