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

ReactJS使用axios调用API时如何实现数据表格日期范围筛选

完整实现示例

以下是基于React18 + Ant Design + axios的可运行示例,覆盖日期范围参数传递、接口请求、表格渲染全流程:

1. 安装依赖

npm install antd axios dayjs

2. 组件代码实现

import { useState, useEffect } from 'react';
import { Table, DatePicker, Space, message } from 'antd';
import axios from 'axios';
import dayjs from 'dayjs';

const { RangePicker } = DatePicker;

const DataTableWithDateFilter = () => {
  // 状态定义
  const [tableData, setTableData] = useState([]);
  const [loading, setLoading] = useState(false);
  const [dateRange, setDateRange] = useState([]);

  // 获取表格数据方法
  const fetchTableData = async (startDate = '', endDate = '') => {
    setLoading(true);
    try {
      // 构造请求参数,日期格式可根据后端要求调整
      const params = {
        page: 1,
        pageSize: 10,
        ...(startDate && { start_date: dayjs(startDate).format('YYYY-MM-DD') }),
        ...(endDate && { end_date: dayjs(endDate).format('YYYY-MM-DD') })
      };
      const res = await axios.get('你的接口地址', { params });
      // 按后端返回结构调整取值逻辑
      setTableData(res.data.list || []);
    } catch (err) {
      message.error('数据获取失败');
      console.error(err);
    } finally {
      setLoading(false);
    }
  };

  // 日期范围变化触发筛选
  const handleDateChange = (dates) => {
    setDateRange(dates);
    if (dates && dates.length === 2) {
      fetchTableData(dates[0], dates[1]);
    } else {
      // 清空日期时返回全量数据
      fetchTableData();
    }
  };

  // 初始化加载全量数据
  useEffect(() => {
    fetchTableData();
  }, []);

  // 表格列配置,按实际需求调整
  const columns = [
    {
      title: '序号',
      dataIndex: 'id',
      key: 'id'
    },
    {
      title: '内容',
      dataIndex: 'content',
      key: 'content'
    },
    {
      title: '创建时间',
      dataIndex: 'create_time',
      key: 'create_time',
      render: (text) => dayjs(text).format('YYYY-MM-DD HH:mm:ss')
    }
  ];

  return (
    <div style={{ padding: 20 }}>
      {/* 筛选区域 */}
      <Space style={{ marginBottom: 20 }}>
        <RangePicker
          value={dateRange}
          onChange={handleDateChange}
          format="YYYY-MM-DD"
          placeholder={['开始日期', '结束日期']}
        />
      </Space>
      {/* 表格区域 */}
      <Table
        rowKey="id"
        loading={loading}
        dataSource={tableData}
        columns={columns}
        pagination={{
          total: tableData.length,
          pageSize: 10
        }}
      />
    </div>
  );
};

export default DataTableWithDateFilter;

注意事项

  • 日期传参格式必须和后端接口要求保持一致,若后端要求时间戳可把format方法替换为valueOf()
  • 如果不需要依赖Ant Design,可替换为原生input type="date"实现范围选择,逻辑完全一致
  • 若需要前端本地筛选不请求接口,可在拿到全量数据后直接用filter方法过滤时间字段即可,示例如下:
// 前端本地筛选逻辑
const filteredData = allData.filter(item => {
  const itemTime = dayjs(item.create_time).valueOf();
  const startTime = dateRange[0] ? dayjs(dateRange[0]).startOf('day').valueOf() : -Infinity;
  const endTime = dateRange[1] ? dayjs(dateRange[1]).endOf('day').valueOf() : Infinity;
  return itemTime >= startTime && itemTime <= endTime;
})

开发界面截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:15:03