You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native调用supabase.auth.x时报错:undefined is not a function

Expo React Native中Supabase Auth方法报"undefined is not a function"的解决办法

1. 检查Supabase客户端初始化配置

核心问题大概率出在supabase-service.js的客户端配置上,需确保初始化逻辑正确:

正确的v2+版本初始化示例

import { createClient } from '@supabase/supabase-js';
import * as SecureStore from 'expo-secure-store';

// 替换为你的Supabase项目信息
const supabaseUrl = '你的Supabase项目URL';
const supabaseAnonKey = '你的Supabase匿名密钥';

// 适配Expo的安全存储适配器
const ExpoSecureStoreAdapter = {
  getItem: (key) => SecureStore.getItemAsync(key),
  setItem: (key, value) => SecureStore.setItemAsync(key, value),
  removeItem: (key) => SecureStore.deleteItemAsync(key),
};

// 创建并导出配置好的客户端
const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    storage: ExpoSecureStoreAdapter,
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false, // React Native环境无需此配置
  },
});

export default supabase;

配套依赖安装命令:

npx expo install @supabase/supabase-js expo-secure-store

注意:不要误装supabase包(这是Supabase CLI工具,而非客户端SDK)。

2. 验证导入与导出逻辑

  • 确认App.js中import supabase from "./supabase-service.js"的路径、文件名拼写无误;
  • 检查supabase-service.js是否用export default导出客户端实例,若用命名导出需对应修改导入语句为import { supabase } from "./supabase-service.js"。

3. 修正useEffect的执行逻辑

你的useEffect缺少依赖数组,会导致组件重复渲染执行,同时需清理订阅避免内存泄漏:

useEffect(() => {
  // 初始化获取当前会话
  setAuth(supabase.auth.session());

  // 订阅认证状态变更
  const authSubscription = supabase.auth.onAuthStateChange((_event, session) => {
    setAuth(session);
  });

  // 组件卸载时取消订阅
  return () => authSubscription.unsubscribe();
}, []); // 空数组确保仅初始化执行一次

4. 排查SDK版本兼容性

若使用旧版@supabase/supabase-js(v1),初始化和方法调用逻辑与v2差异较大,建议升级到最新稳定版,规避版本兼容问题。

内容的提问来源于stack exchange,提问作者Suto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:45:31