Vaadin Flow 网格 setItems on Filter 调用 API 两次
Vaadin Flow grid setItems on Filter calls API twice
我有一个 vaadin 19 应用程序。该页面仅在顶部显示一个 Grid 组件和过滤器文本字段。我目前正在将其迁移到使用微服务架构的单独服务中。将所有项目分页就可以了,这很有效。当我对 table 应用过滤器时,搜索它两次命中 url 的数据。
我可以在日志中看到请求已发出两次。我不知道为什么。下面是我的代码:
filterText.addValueChangeListener(e -> filterByName(e.getValue()));
这会调用以下方法。
private void filterByName(String filterString) {
String likeFilter = "%" + filterString + "%";
grid.setItems(query -> userMicroserviceClient.findByNameAndEmailFilter(likeFilter,
PageRequest.of(query.getPage(), query.getPageSize(),
toSpringDataSort(query.getSortOrders())))
.stream());
}
知道为什么这会调用微服务 api 两次。
谢谢
我认为这是因为 Grid 分两批获取行。首先,它会立即进行乐观提取,即使它不知道要显示多少内容,也要立即显示一些内容。在组件根据最初获取的数据在浏览器中实际呈现后,它可能会再次请求获取更多行以将它们缓存起来以确保平滑滚动。
您可以通过检查两个请求是否针对不同的页面而不是在两个请求中相同来验证这一点。
我有一个 vaadin 19 应用程序。该页面仅在顶部显示一个 Grid 组件和过滤器文本字段。我目前正在将其迁移到使用微服务架构的单独服务中。将所有项目分页就可以了,这很有效。当我对 table 应用过滤器时,搜索它两次命中 url 的数据。
我可以在日志中看到请求已发出两次。我不知道为什么。下面是我的代码:
filterText.addValueChangeListener(e -> filterByName(e.getValue()));
这会调用以下方法。
private void filterByName(String filterString) {
String likeFilter = "%" + filterString + "%";
grid.setItems(query -> userMicroserviceClient.findByNameAndEmailFilter(likeFilter,
PageRequest.of(query.getPage(), query.getPageSize(),
toSpringDataSort(query.getSortOrders())))
.stream());
}
知道为什么这会调用微服务 api 两次。
谢谢
我认为这是因为 Grid 分两批获取行。首先,它会立即进行乐观提取,即使它不知道要显示多少内容,也要立即显示一些内容。在组件根据最初获取的数据在浏览器中实际呈现后,它可能会再次请求获取更多行以将它们缓存起来以确保平滑滚动。
您可以通过检查两个请求是否针对不同的页面而不是在两个请求中相同来验证这一点。