antd的Table后端排序(列升降序)的坑

antd Table列升降序需要有个sorter属性

由于分页是后端分页,因此,排序也必须用后端排序(因为前端获取到的数据只有一页,无法正确排序)

sorter: (a, b) => { // 啥也不写,不需要前端排序,写了sorter才会出现排序图标},

这里会碰到一个坑,接口请求回来的数据明明已经排序正确了,传给dataSource也是正常的,为什么渲染出来的是错的? 因为前端又不完整的自行排序了一次

这时候sorter就不该写成回调函数形式,而应该写成sorter: true

const columns = [{
  title: 'Name',
  dataIndex: 'name',
  filters: [{
    text: 'Joe',
    value: 'Joe',
  }, {
    text: 'Jim',
    value: 'Jim',
  }, {
    text: 'Submenu',
    value: 'Submenu',
    children: [{
      text: 'Green',
      value: 'Green',
    }, {
      text: 'Black',
      value: 'Black',
    }],
  }],
  // specify the condition of filtering result
  // here is that finding the name started with `value`
  onFilter: (value, record) => record.name.indexOf(value) === 0,
  // sorter: (a, b) => a.name.length - b.name.length,
  sorter: true,
}]

那回调不写,我应该在哪里发送后端排序请求呢?

<CustomTable // 封装的表格组件,属性是一样的

      rowKey='projId'

      size="small"

      style={{ height: tableHeight }}

      columns={columns}

      tableData={this.state.tableData}

      expandedRowRender={this.expandedRowRender}

      pagination={pagination}

      handleTableChange={this.handleTableChange} // 在这里发送请求 处理后端排序

      scroll={{ y: tableScrollHeight, x: 1660 }}

      tableRowSelection={this.tableRowSelection}

/>

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
antd Table组件提供了很方便的列排序功能,可以通过设置`sorter`属性来实现。 首先在表头列中设置`sorter`属性为一个对象,对象中包含两个属性:`compare`和`multiple`。 `compare`属性是一个比较函数,接收两个参数,分别是当前行数据的两个单元格的数据,返回值为`1`或`-1`。当返回值为`1`时表示第一个单元格的数据大于第二个单元格的数据,需要升序排列;当返回值为`-1`时表示第二个单元格的数据大于第一个单元格的数据,需要降序排列。 `multiple`属性用于支持多列排序,当该属性为`true`时,按下`shift`键再点击列头可以添加该列到排序中。 举个例子,假设我们有一个表格数据如下: ```javascript const dataSource = [ { key: '1', name: '张三', age: 23, address: '北京市海淀区', }, { key: '2', name: '李四', age: 25, address: '上海市黄浦区', }, { key: '3', name: '王五', age: 20, address: '广州市天河区', }, ]; ``` 我们可以在表头列中设置`sorter`属性来实现对数据的排序,比如按照年龄从小到大排序: ```javascript import { Table } from 'antd'; const columns = [ { title: '姓名', dataIndex: 'name', key: 'name', }, { title: '年龄', dataIndex: 'age', key: 'age', sorter: (a, b) => a.age - b.age, }, { title: '地址', dataIndex: 'address', key: 'address', }, ]; function App() { return <Table dataSource={dataSource} columns={columns} />; } ``` 这样就可以在年龄列头点击来实现升序或降序排列了。 如果要支持多列排序,只需要将`multiple`属性设置为`true`即可: ```javascript import { Table } from 'antd'; const columns = [ { title: '姓名', dataIndex: 'name', key: 'name', }, { title: '年龄', dataIndex: 'age', key: 'age', sorter: { compare: (a, b) => a.age - b.age, multiple: true }, }, { title: '地址', dataIndex: 'address', key: 'address', sorter: { compare: (a, b) => a.address.localeCompare(b.address), multiple: true }, }, ]; function App() { return <Table dataSource={dataSource} columns={columns} />; } ``` 现在我们可以按下`shift`键再点击地址列头来实现多列排序了。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值