4

过滤项目的官方方法是itemListPredicate事件处理程序。它记录在这里:

https://blueprintjs.com/docs/#select/select-component.querying

问题是itemListPredicate有这个签名:

export declare type ItemListPredicate<T> = (query: string, items: T[]) => T[];

如您所见,它希望立即从已存在项目的固定列表中过滤掉一些项目。这不能用于大型数据集。我需要将查询发送到服务器,等待答案,然后返回(可能是新的)项目。但这不能用上述处理程序完成,因为它不是异步的。

我试图做一个解决方法:

  • 调用 itemListPredicate 时将更改的查询保存在本地状态
  • 从去抖异步方法向服务器发送查询并等待答案
  • 服务器发回响应后更改组件的items属性Select

但这也不起作用。更改items属性将自动关闭 Popover,因此不能用于实时搜索。

我也可以为此使用不同的组件(例如,React-Select),但我想使用带有 blueprintjs Select 的解决方案 - 只是因为它是 blueprintjs 库的一部分并与它无缝集成。(例如尺寸、主题、图标、意图等)

如何正确执行此操作?

更新:我发现我错了。设置 items 属性不会关闭 Popover。我不小心设置了导致重新渲染整个 Select 的其他内容。所以我的想法确实有效。我不会删除这篇文章,因为其他人可能需要它。我将稍后(测试后)发布整个解决方案。

4

0 回答 0