在Antd表格中,可以使用自定义筛选功能来实现将一个输入框与多个dataIndex进行过滤。以下是一个使用Antd的Table组件实现该功能的代码示例:
import React, { useState } from 'react';
import { Table, Input, Button } from 'antd';
import { SearchOutlined } from '@ant-design/icons';
const data = [
{
name: 'John',
age: 32,
address: 'New York',
},
{
name: 'Mike',
age: 28,
address: 'Los Angeles',
},
{
name: 'Lisa',
age: 24,
address: 'Chicago',
},
];
const FilterTable = () => {
const [searchText, setSearchText] = useState('');
const [searchedColumn, setSearchedColumn] = useState('');
const getColumnSearchProps = (dataIndex) => ({
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (
setSelectedKeys(e.target.value ? [e.target.value] : [])}
onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}
style={{ width: 188, marginBottom: 8, display: 'block' }}
/>
),
filterIcon: (filtered) => ,
onFilter: (value, record) =>
record[dataIndex] ? record[dataIndex].toString().toLowerCase().includes(value.toLowerCase()) : '',
onFilterDropdownVisibleChange: (visible) => {
if (visible) {
setTimeout(() => searchInput.select(), 100);
}
},
render: (text) =>
searchedColumn === dataIndex ? (
{text}
) : (
{text}
),
});
const handleSearch = (selectedKeys, confirm, dataIndex) => {
confirm();
setSearchText(selectedKeys[0]);
setSearchedColumn(dataIndex);
};
const handleReset = (clearFilters) => {
clearFilters();
setSearchText('');
};
const columns = [
{
title: 'Name',
dataIndex: 'name',
...getColumnSearchProps('name'),
},
{
title: 'Age',
dataIndex: 'age',
...getColumnSearchProps('age'),
},
{
title: 'Address',
dataIndex: 'address',
...getColumnSearchProps('address'),
},
];
return
;
};
export default FilterTable;
上述代码中,我们使用了getColumnSearchProps
函数来生成自定义筛选的属性,然后在每一列的...getColumnSearchProps(dataIndex)
中调用该函数进行配置。
这样,每一列的表头就会显示一个输入框和两个按钮(搜索和重置)。当输入框中的内容改变时,会触发筛选功能,只显示符合条件的数据。
注意:上述代码是一个React函数组件,需要在React项目中使用。另外,代码中使用了Antd的Table、Input和Button组件,需要先安装Antd并导入相应的组件。