ant design table 表头column filters 过滤属性的还原
2019.12.06 遇到了一个bugbug 描述:在使用 antd 组合组件 Form + Table 时,选择相应的搜索条件后,点击“搜索”按钮,Table 会渲染相应的数据,且Table 表头也有自带的过滤功能(实际上是column的filters属性起的作用);然后再点击“清除”按钮,所有的搜索条件和表头里filters过滤的条件都要被清除。上述是 bug 解决后所要达到的期望,实...
2019.12.06 遇到了一个bug
bug 描述:在使用 antd 组合组件 Form + Table 时,选择相应的搜索条件后,点击“搜索”按钮,Table 会渲染相应的数据,且Table 表头也有自带的过滤功能(实际上是column的filters属性起的作用);然后再点击“清除”按钮,所有的搜索条件和表头里filters过滤的条件都要被清除。
上述是 bug 解决后所要达到的期望,实际上 bug 的产生是因为点击“清除”按钮后,搜索栏的搜索条件被清空了,但是 Table 组件表头column里的过滤条件未清空
用一个 gif 图来描述该 bug 的诞生:
上述动图最后点击“清除”按钮后,虽然数据表格里的数据刷新了,但是表头-状态的 filters 并未还原。
解决方法:
其实对于 react + antd 很熟练的开发者和善于利用组件的接口文档学习的开发者来说,这个问题很容易就解决了,因为在 antd 工具的官方文档中就有该问题的解决办法,只不过 antd 文档未给出具体的实例说明,这就需要开发者线下自学了。
解决问题的主要办法是 column API 的 filteredValue (https://2x.ant.design/components/table-cn/ ,antd2.0和3.0均可查阅)这个属性,官方文档的介绍是这样的:
使用实例(方法): 以下代码只列出解决问题的必要部分
组件内部变量存储
state = {
filteredInfo: null // table表头里的筛选集合
}
表格组件状态变化后的处理方法
// 表格组件状态变化后的处理
tableChange = ({ current: pageNum, pageSize }, filters) => {
this.setState({ filteredInfo: filters })
// 获取表头的筛选状态值
const status = filters.status
// 请求数据
this.props.getList({
pageNum,
pageSize,
status
});
}
一键清除(包含Form和Table)方法
resetForm = (e) => {
e.preventDefault();
this.props.form.resetFields();
// 清除时,同时也要清除表头里的筛选
this.setState({ filteredInfo: null });
// 因为全部清除,故无需传参数
this.props.getList();
}
react 里的 render() 方法
let { filteredInfo } = this.state;
filteredInfo = filteredInfo || {};
const columns = [
{
title: '状态',
dataIndex: 'status',
filters: [
{ text: '生成中', value: '0' },
{ text: '待确认', value: '1' },
{ text: '已确认', value: '2' },
......
],
filteredValue: filteredInfo.status || null
render: (text) => [
'生成中', '待确认', '已确认', ......
][text]
},
{
title: '入账标志',
dataIndex: 'enterStatus',
filters: [
{ text: '未入账', value: '0' },
{ text: '入账中', value: '1' },
{ text: '已入账', value: '2' }
],
filteredValue: filteredInfo.enterStatus || null,
render: (text) => [
'未入账', '入账中', '已入账'
][text]
}
]
return (
<div>
<Form onSubmit={this.handleSubmit}>
<Form.Item>
<Button onClick={this.resetForm}> 清除 </Button>
<Button type='primary' htmlType='submit'>搜索</Button>
</Form.Item>
</Form>
<Table
onChange={this.tableChange}
columns={columns}
dataSource={this.props.list}
pagination={
current: this.props.pageNum,
pageSize: this.props.pageSize,
total: this.props.total,
showSizeChanger: true,
showQuickJumper: true
},
/>
</div>
)
实质上,就是把 filteredValue 的值从有变为无的过程,这样就解决了这个bug...
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)