React Native useAuthStateChange未更新useEffect子数据库中的状态

f5emj3cl  于 2023-03-03  发布在  React
关注(0)|答案(1)|浏览(146)

使用expo和supabase(没有 typescript ),我尝试在useEffect钩子内调用useAuthStateChange,以便用会话更新useState。
根据Supabase Postgres日志,登录和注册都需要工作,但我相信useAuthStateChange可能会在页面加载时启动,然后不会重新启动。
这是我的代码。如果我遗漏了什么,请告诉我:

useEffect(() => {
        supabase.auth.getSession().then(({ data: { session } }) => {
            setSession(session);
        });

        supabase.auth.onAuthStateChange(({ data: { session } }) => {
            setSession(session);
        }); 
    }, []);
rdlzhqv9

rdlzhqv91#

您是否遵循了Expo/React本地的初始化建议:网站?https://supabase.com/docs/guides/getting-started/tutorials/with-expo#initialize-a-react-native-app ?

import AsyncStorage from '@react-native-async-storage/async-storage'
import { createClient } from '@supabase/supabase-js'

const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    storage: AsyncStorage as any,
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
})

那么这应该行得通:

useEffect(() => {
    supabase.auth.getSession().then(({ data: { session } }) => {
      setSession(session)
    })

    supabase.auth.onAuthStateChange((_event, session) => {
      setSession(session)
    })
  }, [])

查看上面的代码,我认为您在onAuthStateChange回调中错误地访问了会话。

相关问题