我正在用nextjs和supabase创建一个项目。
由于未知的原因,我在控制台中收到以下警告:
在同一浏览器上下文中检测到多个GoTrueClient示例。这不是一个错误,但应该避免,因为当在同一个存储键下并发使用时,它可能会产生未定义的行为。
我找不到病因
下面是我在_app.tsx中初始化supabase示例的方法:
export default function App({
Component,
pageProps,
}: AppProps<{ initialSession: Session }>) {
const [supabaseClient] = useState(() => createBrowserSupabaseClient());
return (
<>
<style jsx global>
{`
:root {
--font-inter: ${inter.style.fontFamily};
}
`}
</style>
<SessionContextProvider
supabaseClient={supabaseClient}
initialSession={pageProps.initialSession}
>
<ChakraProvider theme={theme}>
<Layout>
<Component {...pageProps} />
</Layout>
</ChakraProvider>
</SessionContextProvider>
</>
);
}
下面是我在组件中使用示例的方式:
const ForgotPassword = () => {
const toast = useToast();
const supabase = useSupabaseClient();
...
}
你有没有遇到过这样的问题,可以帮助我了解我做错了什么?
4条答案
按热度按时间tzdcorbm1#
只运行
createClient
一次,然后在后续执行时返回该示例更改代码
到
aamkag612#
更好的是使用typescript和auth头
wj8zmpe13#
我得到这个错误的原因是因为我不得不将
auth-helpers-nextjs
从0.7.x降级到0.6.x,以支持注册时没有电子邮件确认,版本0.7.x自动返回
createPagesBrowserClient
的单例对象在0.6.x版本中,
createBrowserSupabaseClient
总是返回新对象而不是单例,如果在react 18中启用react模式,页面将呈现两次,导致多个GoTrueClients错误。
我如何修复它是通过创建一个新的对象与SupplyClient的单例示例:
然后在_app.tsx中使用它:
现在警告应该消失了。
vjrehmav4#
把“浏览器客户端”变成一个单例为我修复了它(但不要为服务器客户端这样做)。