antd table input筛选
时间: 2023-07-02 21:22:26 浏览: 176
Antd Table 支持使用 Input 组件进行筛选,可以在列的配置中设置 `filterDropdown` 属性来自定义筛选菜单。
例如,在一个列上设置了 Input 筛选,可以这样写列的配置:
```jsx
{
title: 'Name',
dataIndex: 'name',
filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (
<div style={{ padding: 8 }}>
<Input
placeholder="Search name"
value={selectedKeys[0]}
onChange={(e) => setSelectedKeys(e.target.value ? [e.target.value] : [])}
onPressEnter={() => confirm()}
style={{ width: 188, marginBottom: 8, display: 'block' }}
/>
<Button
type="primary"
onClick={() => confirm()}
size="small"
style={{ width: 90, marginRight: 8 }}
>
Search
</Button>
<Button onClick={() => clearFilters()} size="small" style={{ width: 90 }}>
Reset
</Button>
</div>
),
onFilterDropdownVisibleChange: (visible) => {
if (visible) {
setTimeout(() => this.searchInput.select());
}
},
render: (text) => <Highlighter highlightStyle={{ backgroundColor: '#ffc069', padding: 0 }} searchWords={[this.state.searchText]} autoEscape textToHighlight={text.toString()} />,
}
```
上面的配置中,`filterDropdown` 属性用来自定义筛选菜单。它接收一个对象作为参数,包含四个属性:
- `setSelectedKeys`:设置选中的筛选项
- `selectedKeys`:当前选中的筛选项
- `confirm`:确认筛选的回调函数
- `clearFilters`:重置筛选的回调函数
在 `filterDropdown` 中,我们使用了 Antd 的 Input 和 Button 组件来实现筛选菜单。其中,Input 的值使用 `selectedKeys[0]`,并在 `onChange` 事件中通过 `setSelectedKeys` 来设置选中的筛选项。按下 Enter 键后,会触发 `confirm` 回调函数进行筛选。点击 Search 按钮和 Reset 按钮,分别会触发 `confirm` 和 `clearFilters` 回调函数。
除了 `filterDropdown` 属性外,还需要设置 `onFilterDropdownVisibleChange` 属性来控制筛选菜单的显示和隐藏。在 `onFilterDropdownVisibleChange` 中,我们使用了 `setTimeout` 函数来延迟调用 `select` 方法,以便在 Input 出现后立即获取焦点。
最后,在 `render` 函数中,我们使用了 `Highlighter` 组件来高亮匹配的文本。
需要注意的是,上面的示例中使用了 `this.state.searchText` 来表示当前的搜索文本。如果需要将搜索结果保存到状态中,还需要定义 `state` 和 `setState` 方法。另外,如果使用函数式组件,需要使用 `useState` 钩子来实现状态管理。
阅读全文