如何在下一个JS中使用React查询来使下一步的依赖性服务器查询?

发布于 2025-02-13 23:24:33 字数 1622 浏览 2 评论 0原文

我正在尝试使用React Query的UseInfiniteQuery Hook来制作API获取请求,该挂钩使用了查询字符串中下一个auth会话令牌中的数据。

我在/api/auth/[... nextauth.ts]中有一个回调,将额外的用户> userdata发送到我的会话令牌。

客户端有两个相关页面。让我们称它们为/pages/index.tsx/hooks/useapidata.ts。出于所有意图和目的,这就是他们的样子:

// pages/index.tsx

export default function Page() {
   const {data, fetchNextPage, isLoading, isError} = useCourseData()

   if (isLoading) return <main />

   return <main>
      <InfiniteScroller fetchMore={fetchNextPage}>
         {data?.pages?.map(page => page?.results?.map(item: string => item))}
      </InfiniteScroller>
   </main>
}
// hooks/useApiData.ts

async function fetchPage(pageParam: string) {
   const response = await fetch(pageParam)
   return await response.json()
}

export default function useApiData() {
   const {data: session} = useSession()

   const init = `/api?userData=${session?.user?.userData}`
   
   return useInfiniteQuery('query',
      ({pageParam = init}) => fetchPage(pageParam),
      {getNextPageParam: prevPage => prevPage.next ?? undefined}
   )
}

我的初始请求以/api?userData = undefined发送到API。额外的数据肯定正在进入令牌。

我可以通过/pages/index.tsx的渲染函数将数据放在DOM中,因此我认为问题与在会话上下文准备好之前运行的自定义挂钩有关或类似的东西...我不了解钩子的机制,足以弄清楚这一点。

我一直在寻找很长时间的答案,而且我很惊讶没有找到一个有同样问题的人。这些不是不受欢迎的包裹,我想很多人都在使用它们来实现我在这里尝试的目标,所以我认为我必须做一些特别愚蠢的事情。但是什么?

如何将我的下一个验证会话中的数据获取到我的React查询请求中?对于奖励积分,为什么在我的自定义挂钩中发送请求时会话数据不可用?

I am trying to make an API GET request, using React Query's useInfiniteQuery hook, that uses data from a Next Auth session token in the query string.

I have a callback in /api/auth/[...nextauth.ts] to send extra userData to my session token.

There are two relevant pages on the client side. Let's call them /pages/index.tsx and /hooks/useApiData.ts. This is what they look like, for all intents and purposes:

// pages/index.tsx

export default function Page() {
   const {data, fetchNextPage, isLoading, isError} = useCourseData()

   if (isLoading) return <main />

   return <main>
      <InfiniteScroller fetchMore={fetchNextPage}>
         {data?.pages?.map(page => page?.results?.map(item: string => item))}
      </InfiniteScroller>
   </main>
}
// hooks/useApiData.ts

async function fetchPage(pageParam: string) {
   const response = await fetch(pageParam)
   return await response.json()
}

export default function useApiData() {
   const {data: session} = useSession()

   const init = `/api?userData=${session?.user?.userData}`
   
   return useInfiniteQuery('query',
      ({pageParam = init}) => fetchPage(pageParam),
      {getNextPageParam: prevPage => prevPage.next ?? undefined}
   )
}

My initial request gets sent to the API as /api?userData=undefined. The extra data is definitely making its way into the token.

I can place the data from my session in the DOM via the render function of /pages/index.tsx, so I figure the problem is something to do with custom hooks running before the session context is ready, or something like that... I don't understand the mechanics of hooks well enough to figure that out.

I've been looking for answers for a long time, and I'm surprised not to have found a single person with the same issue. These are not unpopular packages and I guess a lot of people are using them in conjunction to achieve what I'm attempting here, so I figure I must be doing something especially dumb. But what?!

How can I get the data from my Next Auth session into my React Query request? And for bonus points, why is the session data not available when the request is sent in my custom hook?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文