antd table 筛选排序远程加载 触发pagination onChange事件

背景:  在使用antd的Table组件的时候,本来只有正常的翻页需求,然后加了一个表头的筛选功能。
很简单,然后踩坑了。。

遇到问题如下按照官网demo添加事件,但是发现写完之后,请求了两次接口,一次带筛选一次不带筛选

如图 :

本例也展示了筛选排序功能如何交给服务端实现,列不需要指定具体的 onFilter 和 sorter 函数,而是在把筛选和排序的参数发到服务端来处理。

遇到问题如下:按照官网demo添加事件,但是发现写完之后,请求了两次接口,一次带筛选一次不带筛选

没有思路,看到某博主的帖子,发现这是antd一个bug设计
#Table 组件排序功能会自动触发 pagination 的 onChange 事件#

再看官网,顿悟,onchange 事件,返回参数如下:

function(
 pagination, 
 filters, 
 sorter, 
 extra: { currentDataSource: [], action: paginate | sort | filter }

)

action可以判断是分页/筛选/排序触发类型
所以,筛选时触发分页事件,调用2次接口,解决方案如下:

pagination中onchange事件不使用,直接使用table的onChange回调同时监听判断是筛选/分页两个事件,并获取到参数,远程查询。

具体实现代码如下:

//table标签

    <Table
        columns={columns}
        rowKey={record => record.login.uuid}
        dataSource={data}
        pagination={pagination}
        loading={loading}
        onChange={this.handleTableChange}
      />
 const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    sorter: true,
    render: name => `${name.first} ${name.last}`,
    width: '20%',
  },
  {
    title: 'Gender',
    dataIndex: 'gender',
    filters: [
      { text: 'Male', value: 'male' },
      { text: 'Female', value: 'female' },
    ],
    width: '20%',
  },
  {
    title: 'Email',
    dataIndex: 'email',
  },
];

handleTableChange = (pagination, filters, sorter) => {
   //接口查询
    this.fetch({
      sortField: sorter.field,
      sortOrder: sorter.order,
      pagination,
      ...filters,
    });
  };
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ant Design的Table组件提供了很多筛选功能,包括列筛选和全局筛选,可以根据不同的需求进行选择。 1. 列筛选筛选可以让用户通过下拉框的方式选择需要显示的数据。在Table的columns配置中,每个列都可以通过filters属性配置筛选项,例如: ```jsx const columns = [ { title: '姓名', dataIndex: 'name', key: 'name', filters: [ { text: '张三', value: '张三' }, { text: '李四', value: '李四' }, ], onFilter: (value, record) => record.name.includes(value), }, { title: '年龄', dataIndex: 'age', key: 'age', filters: [ { text: '30岁以下', value: '30' }, { text: '30岁以上', value: '30+' }, ], onFilter: (value, record) => { if (value === '30') { return record.age < 30; } if (value === '30+') { return record.age >= 30; } return false; }, }, // 其他列 ]; ``` 其中,filters属性是一个数组,每个元素代表一个筛选项,包括text(显示文本)和value(筛选值)两个属性。onFilter属性是一个回调函数,用于筛选数据,返回true表示数据满足筛选条件。 2. 全局筛选 全局筛选可以让用户输入关键字,筛选出包含关键字的数据。在Table的props中,可以使用search属性配置全局筛选,例如: ```jsx function onSearch(value) { console.log(value); } <Table columns={columns} dataSource={data} search={{ onSearch }} /> ``` 其中,onSearch是一个回调函数,用于处理搜索事件。当用户输入关键字并点击搜索按钮时,会触发onSearch函数,参数value代表用户输入的关键字。 以上是Ant Design的Table组件提供的筛选功能,可以根据具体的需求进行选择和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值