首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-query如何使用useInfiniteQuery?

react-query如何使用useInfiniteQuery?
EN

Stack Overflow用户
提问于 2020-08-13 10:37:48
回答 1查看 1.7K关注 0票数 1

我要将查询传递给getAnalysisListByPatientIdApi,所以我尝试将查询放入useInfiniteQuery数组的第一个参数中,比如useQuery

代码语言:javascript
复制
  const { data: analyses } = useInfiniteQuery(
    ['getAnalysesByPatientIdApi', { patientId: selectedPatientId }],
    getAnalysisListByPatientIdApi,
    {
      getFetchMore: (lastGroup, allGroups) => {
        const morePagesExist = lastGroup?.data.result.contents.length === 9
        if (!morePagesExist) return false
        return allGroups.length + 1
      },
    },
  )
代码语言:javascript
复制
export const getAnalysisListByPatientIdApi = (_: string, query?: AnalysisListPatientQuery) => {
// should get query from useInfiniteQuery
  return api.post<PagingResponse<AnalysisListPatientResponse>>(`/analysis/list/patient`, {
    page: query?.page || 1,
    size: query?.size || 9,
    patientId: query?.patientId || '',
  })
}

我希望从getAnalysisListByPatientIdApi中的useInfiniteQuery获取{ patientId: selectedPatientId },但出现错误:Type '{ patientId: string; }' is not assignable to type 'string'

如何解决这个问题?有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-13 14:26:53

太棒了~!我自己做的。对于那些想知道如何使用useInfiniteQuery的人来说...

关键的一点是useInfiniteQuery是将游标传递给exampleApi本身。您所要做的就是实现getFetchMore

代码语言:javascript
复制
import React from "react";
import { useInfiniteQuery } from "react-query";
import { ReactQueryDevtools } from "react-query-devtools";
import axios from "./fakeApis/axios";

const exampleApi = async (_: any, cursor: number) => {
  console.log(_, cursor);
  return await await axios.post(`/list/${cursor || 1}`);
};

export function App() {
  const { canFetchMore, isLoading, error, data, fetchMore } = useInfiniteQuery(
    "repoData",
    exampleApi,
    {
      getFetchMore: (lastGroup, allGroups) => {
        let morePagesExist = true;
        if (lastGroup && lastGroup.data.result) {
          morePagesExist = lastGroup.data.result !== null;
          console.log(morePagesExist);
        }
        if (!morePagesExist) return false;
        console.log(lastGroup?.data);
        // returns next cursor which will send to the cursor of eaxmpleApi
        return lastGroup?.data?.result?.currentPageNo + 1 || false;
      }
    }
  );

  return (
    <div>
      {isLoading && <div>"Loading..."</div>}
      {error && <div>"An error has occurred: " + error.message</div>}
      <button
        disabled={!canFetchMore}
        onClick={(e) => {
          fetchMore();
        }}
      >
        fetch more
      </button>
      {data?.map((o, index) => {
        return (
          <div key={index}>
            {JSON.stringify(o?.data?.result?.contents, 0, 1)}
          </div>
        );
      })}
      <ReactQueryDevtools initialIsOpen />
    </div>
  );
}

https://codesandbox.io/s/react-query-useinfinitequery-be62c?file=/src/App.tsx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63387341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档