使用 RTK Query API 分页,当状态树中没有这样的查询键时,得到上一页的记录

Using RTK Query API paginate, got records of previous page, when there is no such query key in state tree

api:

export const feedsApi = createApi({
  reducerPath: 'feeds',
  tagTypes: ['Feeds'],
  baseQuery: fetchBaseQuery({
    baseUrl: 'http://localhost:5000',
  }),
  endpoints: (build) => ({
    getFeedsByPage: build.query<FeedType[], string>({
      query: (page = '1') => `feeds?_page=${page}`,
      providesTags: (feeds, error, arg) => {
        return feeds
          ? [
              ...feeds.map(({ id }) => ({ type: 'Feeds', id } as const)),
              { type: 'Feeds', id: 'LIST' },
            ]
          : [{ type: 'Feeds', id: 'LIST' }]
      },
    }),
  }),
})

组件:

const FeedsPaginationPage: React.FunctionComponent<
  FeedsPaginationPageProps
> = () => {
  const [query] = useSearchParams()
  const page = query.get('page') ?? '1'
  const { isLoading, data: feeds, isFetching } = useGetFeedsByPageQuery(page,{
    refetchOnMountOrArgChange: true
  })

  console.log('>>>', isLoading, feeds, isFetching, page)

  return (
    <>
      {isLoading ? (
        'loading'
      ) : (
        <>
          <button
            className="btn btn-link"
            onClick={() => navigate(`?page=${+page - 1}`)}
          >
            previous
          </button>{' '}
          <button
            className="btn btn-link"
            onClick={() => navigate(`?page=${+page + 1}`)}
          >
            next
          </button>
        </>
      )}
    </>
  )
}

即有 100 个供稿:

当我从页面<1> 访问页面<2> 时,我得到feeds 总是页面<1> 的数据数组(10 条记录),但在状态树中,显然有没有这样的数据。当调用useGetFeedsByPageQuery("2")时,feeds应该是未定义的,我不明白为什么。

钩子会在加载新数据时将以前的数据保留在 data 中,这样您就可以显示它而不会瞬间闪烁到空白屏幕。您始终可以检查 isFetching 以查看数据是否刚刚被获取并且显示的数据可能已过时,或者访问 currentData 而不是 data