weixin_39654619
weixin_39654619
2020-12-27 23:44

🐛[BUG]2.4.2以上的版本.设置了filters=true, valueEnum不能过滤数据

🐛 bug 描述

首先不是设置 filters=true的问题,我知道需要设置filters才会启用valueEnum的过滤

2.4.2以上的版本,包括现在的2.6.3, 设置filters=true,会出现过滤条件, 但是选择条件不会过滤数据。 例如: valueEnum= A, B, C 3个Key, 查询有 A,B,C 各3条共9条数据, 无论选择什么条件, 表格中保持9条数据。

📷 复现步骤

当前 https://procomponents.ant.design/components/table 范例里的,解决、未解决的过滤就有问题。 现在范例里有30条数据, 其中2条是【未解决】的,28条是【已解决状态】 在过滤条件中勾选 【未解决】, 表格依然会显示30条数据。

将范例代码拷贝下来,将protable版本降低到2.4.2之前,会正确显示2条数据

应该是 2.4.3+ 版本valueEnum的列实现改变照成的。 rendText函数中 2.4.2-: text 参数是 valueEnum.text 2.4.3+: text 参数是 valueEnum.key

https://github.com/ant-design/pro-components/issues/193#issuecomment-673916902

© 版本信息

  • protable 2.4.3+
  • umi 版本
  • 浏览器环境
  • 开发环境 [e.g. mac OS]

该提问来源于开源项目:ant-design/pro-components

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • weixin_39654619 weixin_39654619 3月前

    嗯 renderText 不是问题, 问题点在于现在的过滤不生效了。 无论选什么条件table的数据行数没有变化。 github传图片一直是挂的。。。。 我再试一次

    value

    点赞 评论 复制链接分享
  • weixin_39533896 weixin_39533896 3月前

    如果你用了 request 现在默认的 filter 方法是不生效的,你可以人肉配置一下

    tsx
    const defaultOnFilter = (value: string, record: any, dataIndex: string | string[]) => {
      let recordElement = Array.isArray(dataIndex)
        ? get(record, dataIndex as string[])
        : record[dataIndex];
      if (typeof recordElement === 'number') {
        recordElement = recordElement.toString();
      }
      const itemValue = String(recordElement) as string;
    
      return String(itemValue) === String(value);
    };
    
    点赞 评论 复制链接分享
  • weixin_39654619 weixin_39654619 3月前

    3Q 如果是改变api行为的话 没有问题,我自己处理一下onFilter吧

    点赞 评论 复制链接分享
  • weixin_39533896 weixin_39533896 3月前

    内部有很多用户觉得我们 filter 了之后页面不够 pageSize 的条数是个 bug,所以才改掉的

    点赞 评论 复制链接分享
  • weixin_39654619 weixin_39654619 3月前

    是2.4.2之后改了逻辑了吗, 使用了request就必须后端过滤? 2.4.2之前的版本, 如果启用了valueEnum的过滤,是纯前端的过滤。 我看下来可能的原因, 应该是改了valueEnum的实现逻辑,忘记测试这个过滤功能了。

    2.4.3开始, rendText中的参数 由 text变成了key。 比如说 valueEnum = {"0":{"text":"delete"}} 2.4.2 rendText(text:string) text = 'delete' 2.4.3 rendText(text:string) text = ’0‘

    点赞 评论 复制链接分享
  • weixin_39533896 weixin_39533896 3月前

    我们把渲染的工作交给 ProFeild 了,现在renderText 里面拿到的是默认的值

    点赞 评论 复制链接分享

为你推荐