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

React中使用useEffect实现页面初始加载无筛选表格数据咨询

React 表格筛选+初始化加载+分页实现方案

1. 核心逻辑调整思路

首先把重复的接口请求逻辑抽离为公共函数,供初始化加载、筛选提交、分页切换三个场景调用,避免代码冗余,再通过useEffect监听页码变化自动触发请求,同时实现页面初始化自动加载全量数据。

2. 第一步:抽离公共数据请求函数

把原有submit函数里的请求逻辑抽出来,统一处理筛选参数和分页参数:

// 入参为要请求的目标页码
const fetchData = async (targetPage: number) => {
  const param = {
    page: targetPage, // 传递分页参数给后端接口
    // 原有筛选参数逻辑保持不变
    ...(certificateNo && { certificateNo: certificateNo }),
    ...(protoColNo && { protoColNo: protoColNo }),
    ...(requestStatus && { requestStatus: requestStatus }),
    ...(sponser && { sponser: sponser }),
    ...(country && { country: country }),
    ...(noOfSubjects && { noOfSubjects: noOfSubjects }),
    ...(startDate && { startDate: startDate }),
    ...(endDate && { endDate: endDate }),
  };
  const { data } = await axios.get('http://localhost:3000/api/certificates', {
    params: param,
  });
  setFlag(true);
  setResponse(data);
  // *注意:根据你的后端接口实际返回字段调整,确保拿到总页数赋值给lastPage*
  setLastPage(data.totalPage); 
};

3. 第二步:添加useEffect实现初始化加载+分页自动请求

import { useEffect } from 'react'; // 确保已经引入useEffect

// 页面首次加载会自动执行,page变化时也会自动触发请求
useEffect(() => {
  fetchData(page);
  // 如果使用eslint规则校验,可配合useCallback包裹fetchData消除依赖警告
}, [page]);

4. 第三步:修改原有submit筛选逻辑

筛选提交后重置到第一页,直接调用公共请求函数即可:

const submit = async (e: SyntheticEvent) => {
  e.preventDefault();
  setPage(1); // 筛选后默认回到第一页
  fetchData(1);
};

5. 第四步:修复原有分页逻辑

原有分页逻辑存在边界判断错误、异步更新问题,调整后不需要手动调用fetchData,页码变更会自动触发useEffect请求:

const next = () => {
  // 只有当前页小于总页数时才能点击下一页
  if (page < lastPage) {
    setPage(prevPage => prevPage + 1);
  }
};

const prev = () => {
  // 只有当前页大于1时才能点击上一页
  if (page > 1) {
    setPage(prevPage => prevPage - 1);
  }
};

可选优化点

如果存在筛选参数变化就实时请求的需求,可把fetchData用useCallback包裹,把所有筛选状态、axios实例作为依赖项,再把fetchData加入useEffect的依赖数组即可,避免不必要的重复请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:24:04