Antd的table筛选,表头columns的filters过滤清空

Antd的table筛选,表头columns的filters过滤清空Form+Table实现了自定义筛选菜单的功能。具体可以参考https://ant.design/components/table-cn/#components-table-demo-custom-filter-panel。但是此功能会有bug:选择相应的搜索条件后,点击“搜索”按钮,Table会渲染相应的数据,且Table表头也有自带的过滤功能(实际上是column的filters属性起的作用);然后再点击“清除”按钮,所有的搜索条件和表头里filters过滤的条件都要被清除。但是Ta.

大家好,又见面了,我是你们的朋友全栈君。

Form +Table 实现了自定义筛选菜单的功能。具体可以参考 https://ant.design/components/table-cn/#components-table-demo-custom-filter-panel

但是此功能会有bug:

选择相应的搜索条件后,点击“搜索”按钮,Table 会渲染相应的数据,且Table 表头也有自带的过滤功能(实际上是column的filters属性起的作用);然后再点击“清除”按钮,所有的搜索条件和表头里filters过滤的条件都要被清除。但是 Table 组件表头column里的过滤条件未清空。导致重新发起请求时,table列表展示的仍然是上次带了filters的筛选条件,并没有清空。

解决方案:filteredValue。具体API参考:https://2x.ant.design/components/table-cn/

具体源码:

// 初始化state:filteredInfo

const [filteredInfo, setFilteredInfo] = useState(null);

// columns: 赋属性filteredValue

const columns = [{
  title: 'Cluster',
  dataIndex: 'clusterName',
  ...getColumnSearchProps('clusterName'),
},
{
  title: 'App',
  dataIndex: 'appId',
  ...getColumnSearchProps('appId'),
},
{
  title: 'Namespace',
  dataIndex: 'nameSpaceName',
  ...getColumnSearchProps('nameSpaceName'),
},
{
  title: 'Key',
  dataIndex: 'key',
  ...getColumnSearchProps('key'),
},{
  title: 'Value',
  dataIndex: 'value',
  width: '500px',
  ...getColumnSearchProps('value'),
}];

const getColumnSearchProps = (dataIndex: any) => ({
   filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters, filters }) => {
       return (
          <div style={
   
   { padding: 8 }}>
            <Input
              ref={searchInputRef}
              placeholder={`Search ${dataIndex}`}
              value={selectedKeys && selectedKeys[0]}
              onChange={e => setSelectedKeys(e.target.value ? [e.target.value] : [])}
              onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}
              style={
   
   { width: 188, marginBottom: 8, display: 'block' }}
            />
            <div style={
   
   {display: 'flex', flexDirection: 'row', justifyContent: 'center'}}>
              <Button
                type="primary"
                onClick={() => handleSearch(selectedKeys, confirm, dataIndex)}
                icon="search"
                size="small"
                style={
   
   { width: 70, marginRight: 15 }}
              >
                确认
              </Button>
              <Button onClick={() => handleReset(clearFilters)} size="small" style={
   
   { width: 70 }}>
                清空
              </Button>
            </div>
          </div>
        )},
    filterIcon: filtered => <Icon type="search" style={
   
   { color: filtered ? '#1890ff' : undefined }}  />,
    onFilter: (value, record) => record[dataIndex] ?record[dataIndex].toString().toLowerCase().includes(value.toLowerCase())
            : '',
        onFilterDropdownVisibleChange: visible => {
          if (visible) {
            setTimeout(() => ((searchInputRef as any).current as any).select(), 100);
          }
        },
        filteredValue: filteredInfo && filteredInfo[dataIndex],
        render: text =>
          searchedColumn === dataIndex ? (
            <Highlighter
              highlightStyle={
   
   { backgroundColor: '#ffc069', padding: 0 }}
              searchWords={[searchText]}
              autoEscape
              textToHighlight={text ? text.toString() : ''}
            />
          ) : (
            text
          ),
      });

// Table: 添加onChange事件,并赋值给filteredInfo

<Table
  onChange={tableChange}
  columns={columns}
  dataSource={dataSource}
  pagination={false}
  rowKey={(recode, index) => index.toFixed()}
  bordered
/>

const tableChange = ({ current: pageNum, pageSize }, filters) => {
  console.log('filters', filters);
  setFilteredInfo(filters);
}

// 查询按钮:setFilteredInfo(null)

const handleSubmit = (e: any) => {
  e.preventDefault();
  props.form.validateFields(async (err, values) => {
     if (err) {
       return err
     }
     const { key, value, haveLike } = values;
     if (key || value) {
       getApolloListFunc(key, value, haveLike);
       setFilteredInfo(null);
     } else {
        message.warning('key和value中至少得填写一项查询')
     }
   })
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143433.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月21日 下午6:00
下一篇 2022年5月21日 下午6:00


相关推荐

  • 60行C代码实现一个shell

    60行C代码实现一个shell继 300 来行代码带你实现一个能跑的最小 Linux 文件系统之后 我们来看看如何 60 行 C 代码实现一个 shell 在实现它之前 先看看这样做的意义 美是有目共睹的 Unix

    2026年3月18日
    2
  • Linux系统 设置 cockpit 自动开机启动时异常问题处理(设置systemctl enable cockpit 异常【解决办法】)

    Linux系统 设置 cockpit 自动开机启动时异常问题处理(设置systemctl enable cockpit 异常【解决办法】)Linux 系统设置 cockpit 自动开机启动时异常问题处理问题系统 Centos7 Fedora29 RedHat7syste 时 会出现如下错误 Theunitfiles WantedBy RequiredBy Also Aliassetting

    2025年10月3日
    4
  • 地理加权回归模型步骤_地理加权回归中的拟合度

    地理加权回归模型步骤_地理加权回归中的拟合度目录数据准备加载需要的R包导入空间数据空间自相关分析空间邻域面数据空间邻域点数据空间邻域全局空间自相关局部空间自相关空间回归分析线性回归分析地理加权回归经典的线性回归模型是建立在最小二乘法(OLS模型)基础上对参数进行“平均”或“全局”估计。如果自变量为空间数据,且自变量间存在空间自相关性,传统回归模型(OLS模型)残差项独立的假设将无法满足。地理加权回归(GWR)模型能够反映参数在不同空间的空间非平稳性,使变量间的关系可以随空间位置的变化而变化,其结果更符合客观实际,能反映局部情况。杨晴青,刘倩

    2022年10月7日
    4
  • 嵌入式linux kermit,嵌入式开发常用串口工具kermit使用笔记

    嵌入式linux kermit,嵌入式开发常用串口工具kermit使用笔记配置使用 kermit 一直没成功过 今天心血来潮 在 Gentoo 机器上下载安装了 kermit 折腾了半小时才从串口看到开发板启动信息 kermit 很高深的样子 以后就使用它了 1 下载安装 kermit version8 0 211 eixkermit emerge avkermit2 查看安装文件 starby ls l usr bin kermit rwxr xr

    2026年3月18日
    2
  • docker 删除_Docker删除镜像和容器[通俗易懂]

    docker 删除_Docker删除镜像和容器[通俗易懂]当一个host中镜像和容器较多,需要重置时可选择删除其中部分或全部的镜像和容器。那么你就需要下面的操作了。1、删除容器1)首先需要停止所有的容器dockerstop$(dockerps-a-q)2)删除所有的容器(只删除单个时把后面的变量改为containerid即可)dockerrm$(dockerps-a-q)2、删除镜像1)查看host中的镜像dockeri…

    2022年4月19日
    268
  • 2026年怎样安装系统win10一步步教程

    2026年怎样安装系统win10一步步教程

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号