错误:只有普通对象和一些内置对象可以从服务器组件传递到客户端组件。不支持类或空原型

问题描述 投票:0回答:1

在使用 @tanstack/react-query 中的 QueryClientProvider 时,我的 Next.js 项目遇到错误。删除它可以解决问题,但我需要它来管理查询。layout.tsx 的代码是

import type { Metadata } from "next";
import { Inter } from "next/font/google";
import { GoogleOAuthProvider } from '@react-oauth/google';
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

import { Toaster } from 'react-hot-toast';

import { ReactQueryDevtools } from '@tanstack/react-query-devtools';

import { QueryClient, QueryClientProvider } from '@tanstack/react-query'

const queryClient = new QueryClient()


export const metadata: Metadata = {
  title: "X",
  description: "Generated by create next app",
};

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <QueryClientProvider client={queryClient}>
        <GoogleOAuthProvider clientId="">
          <body className={inter.className}>{children}</body>
          <Toaster/>
          <ReactQueryDevtools />
        </GoogleOAuthProvider>
      </QueryClientProvider>
    </html>
  );
}

reactjs node.js postgresql next.js
1个回答
0
投票

这是一个序列化错误。您可以通过将

QueryClientProvider
移至客户端组件来解决该问题:

"use client";

import { useState } from "react";
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'

export function Providers({ children }) {
  const [queryClient] = useState(new QueryClient())

  return (
    <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
  )
}

然后在布局中渲染这个客户端组件:

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="en">
      <Providers>
        <GoogleOAuthProvider clientId="">
          <body className={inter.className}>{children}</body>
          <Toaster/>
          <ReactQueryDevtools />
        </GoogleOAuthProvider>
      </Providers>
    </html>
  );
}
© www.soinside.com 2019 - 2024. All rights reserved.