如何将 useInfiniteQuery data.pages 钩子中的所有 page.items 合并到一个数组中?

How to merge all `page.items` from `useInfiniteQuery` data.pages hook into a single array?

当使用 react-query 中的 useInfiniteQuery 钩子时,我们得到 data 作为以下对象:

https://react-query.tanstack.com/guides/infinite-queries

基本上我们在 data.pages 属性 中得到多个页面,这是一个页面数组。

每个页面都有一个 items 属性,其中包含结果项数组。

我需要将所有这些 pages[i].items 合并到一个数组中。而且我无法预先确定已提取了多少页。

什么是最好的practice/pattern?

这是要走的路吗?

const allItems = ([] as Array<ItemType>).concat(...data.pages.map((page) => page.items));

我会做:

const allItems = data.pages.flatMap(page => page.items)

如果引用稳定性很重要,请将其包装在 useMemo:

const allItems = React.useMemo(
  () => data.pages.flatMap(page => page.items),
  [data]
)