Zustand Store全局auth函数调用报TypeError错误,求助排查原因
问题排查与解决方案
1. 确认LoginScreen中获取login函数的方式是否正确
Zustand要求通过selector函数获取store中的action,错误的解构方式会导致函数引用异常。
错误示例:
// 错误:直接解构整个store,未使用selector const { login } = useAuthStore();
正确示例:
// 正确:通过selector获取login action const login = useAuthStore(state => state.login);
2. 检查变量名冲突
确认LoginScreen中没有其他同名login变量覆盖store中的函数:
- 是否导入了其他模块的
login函数 - 是否在组件内部定义了局部
login变量
3. 确保在React组件/自定义Hook中调用useAuthStore
Zustand的useAuthStore是React Hook,必须在React组件或自定义Hook内部使用。若在组件外部调用(比如全局工具函数),会导致状态和action无法正确绑定。
4. 验证Firebase auth实例有效性
检查../firebase中导出的auth是否为有效Firebase Auth实例,确保初始化代码正确:
// firebase.js 示例代码 import { initializeApp } from "firebase/app"; import { getAuth } from "firebase/auth"; const firebaseConfig = { /* 你的Firebase配置 */ }; const app = initializeApp(firebaseConfig); export const auth = getAuth(app); // 确保此处正确导出
临时测试方案
修改LoginScreen的handleLogin,直接通过store实例调用login函数验证:
const handleLogin = async () => { try { await useAuthStore.getState().login(email, password); console.log('logged in successfully') } catch (err) { setError(err.message); } };
若此方式正常运行,说明之前的解构方式存在问题。
内容的提问来源于stack exchange,提问作者Guigz
相关产品推荐
相关产品推荐

