TanStackT
TanStack3y ago
11 replies
radical-lime

useInfiniteQuery not keeping all pages

Hello, I am using useInfiniteQuery for a paginated query. I expected when the second page is queried
the pages array to have 2 pages, however it only contains the last page. I'm not sure what i'm doing incorrectly here.

export const playerKeys = {
  all: ['players'] as const,
  list: () => [...playerKeys.all, 'list'] as const,
  detail: (id: string) => [...playerKeys.all, 'detail', id] as const,
};

export const usePlayers = (queryParams: PlayerSearchInputDTO = { page: 0 }) => {
  const apiClient = useApiClient();

  const queryOpts = useInfiniteQuery<PlayerOutputArrayDTOAPI, AxiosError<PlayerOutputArrayDTOAPI>>({
    queryKey: [...playerKeys.list(), { ...queryParams }],
    queryFn: async ({ pageParam = queryParams.page }) =>
      (
        await apiClient.player.playerControllerSearch({
          ...queryParams,
          page: pageParam,
        })
      ).data,
    keepPreviousData: true,
    getNextPageParam: (lastPage, pages) => hasNextPage(lastPage.meta, pages.length),
    useErrorBoundary: (error) => error.response!.status >= 500,
  });

  const InfiniteScroll = useMemo(() => {
    return <InfiniteScrollComponent {...queryOpts} />;
  }, [queryOpts]);

  return { ...queryOpts, InfiniteScroll };
};
image.png
Was this page helpful?