我正在遵循有关使用 Remix 设置 Supabase auth 的教程,当我一步步遵循代码时,我注意到如果我使用以下命令,我的组件会在无限循环中重新渲染:
const [supabase] = useState(() => createBrowserClient(env.SUPABASE_URL, env.SUPABASE_ANON_KEY));
const revalidator = useRevalidator();
// useEffect only depends on revalidator and supabase (which are memoized)
useEffect(() => {
const { data: { subscription } } = supabase.auth.onAuthStateChange((event) => {
console.log(event)
// Revalidate or trigger page refresh when auth state changes
revalidator.revalidate();
});
return () => subscription.unsubscribe(); // Clean up the subscription when component unmounts
}, [revalidator, supabase]);
当我从魔法链接进入页面时,事件总是
INITIAL_SESSION
,只有一个SIGNED_IN(当然)。
这是预期的行为吗?我显然不希望组件继续重新渲染。
每次重新验证器更改时,都会运行
useEffect
,但您是在 useEffect 内部重新验证。每次运行它时,useEffect 都会重新验证它,导致它再次重新运行。