reactjs antd 4.18.5的表过滤器的重置按钮未关闭

n7taea2i  于 2023-08-04  发布在  React
关注(0)|答案(2)|浏览(126)

我们使用antd(4.18.5)表过滤器。当点击重置按钮时,它将重置下拉列表,但该下拉列表没有关闭。我需要关闭下拉列表时点击重置按钮。实际上,当我点击下拉列表之外的时候,下拉列表正在关闭,原始表将通过API调用显示。因此,我需要关闭下拉列表和原始表应显示时单击重置按钮。但是我无法找到函数调用时,点击重置按钮。我试图通过提供风格来关闭该下拉列表。

if(document.getElementsByClassName('ant-table-filter-dropdown-btns')[0] && 
   document.getElementsByClassName('ant-btn-sm')[0]){
    document.getElementsByClassName('ant-btn-sm')[0].addEventListener('click',()=>{
      document.getElementsByClassName('ant-dropdown')[0].style.display='none';
    })
}

字符串
但这也不管用

有人能帮我吗?谢啦,谢啦

9jyewag0

9jyewag01#

我也在寻找同样的东西。但我想通了。在表中,我们有locale prop具有以下键:

  • 从antd Typescript声明复制的接口。*
export interface TableLocale {
    filterTitle?: string;
    filterConfirm?: React.ReactNode;
    filterReset?: React.ReactNode;
    filterEmptyText?: React.ReactNode;
    filterCheckall?: React.ReactNode;
    filterSearchPlaceholder?: string;
    emptyText?: React.ReactNode | (() => React.ReactNode);
    selectAll?: React.ReactNode;
    selectNone?: React.ReactNode;
    selectInvert?: React.ReactNode;
    selectionAll?: React.ReactNode;
    sortTitle?: string;
    expand?: string;
    collapse?: string;
    triggerDesc?: string;
    triggerAsc?: string;
    cancelSort?: string;
}

字符串
你可以在filterReset中传递一个ReactNode,当我们点击该节点或Reset时,你可以通过添加ant-dropdown-hidden类或使用filterDropdownVisibleonFilterDropdownVisibleChange使过滤器下拉列表可见或隐藏来关闭下拉列表。

locale={{
    filterReset: (
        <span
            onClick={() => {
                document.querySelector('.ant-dropdown')!.classList.add('ant-dropdown-hidden');
            }}
        >
            Reset
        </span>
    )
}}


我们可以使用filterDropdown prop,但是使用这个prop,你需要从头开始实现一切(处理复选框,显示所有值,按钮等)。我已经尝试了一切,但如果有人发现有任何其他选择来解决这个问题,可以提供解决方案

gc0ot86w

gc0ot86w2#

我根据穆罕默德的回答找到了一个更好的解决办法。正如他提到的,在表中可以找到locale prop,其中包括filterReset键。这个键接收一个React.ReactNode元素,所以你需要一个状态来存储过滤器下拉列表是打开的还是关闭的,你可以通过这个元素来更新它。

const [isFilterDropdownVisible, setIsFilterDropdownVisible] = useState<boolean>(false);

  const filterreset = (
    <span onClick={() => setIsFilterDropdownVisible(false)}>
      Reset
    </span>
  );
  const tableLocale: TableLocale = {
    filterReset: filterreset,
  }

  return (
    <Table
      columns={columns}
      dataSource={dataSource}
      locale={tableLocale}
    />
  );

字符串
但是这样你仍然不能控制下拉列表是否可见,因为你必须访问表的columns属性并做一些修改。columns prop包括键filterDropdownVisible,它指示下拉过滤器是否可见,以及键filterIcon,它允许您处理过滤器图标的行为。因此,您将filterDropdownVisible设置为created状态,并根据状态的值显示或隐藏下拉列表。最后,您还可以使用filterIcon在单击下拉列表时打开或关闭它。

const columns: ColumnsType<SomeType> = [
    {
      title: 'Subject',
      dataIndex: 'subject',
      filters: subjectColumnFilter,
      onFilter: (value, record) => record.subject.startsWith(subject),
      filterIcon: (filtered: boolean) => (
        <FilterFilled onClick={() => setIsFilterDropdownVisible(!isFilterDropdownVisible)} style={{ color: filtered ? '#1677ff' : undefined }} />
      ),
      filterDropdownVisible: isFilterDropdownVisible
    }
  ];


简而言之,您需要:

  • 保存下拉菜单可见性的状态
  • 访问下拉菜单内的reset按钮,关闭下拉菜单
  • 访问过滤器图标,打开/关闭下拉列表
  • 访问定义下拉列表可见性的columns属性

希望这能帮上忙

相关问题