使用 firebase 进行身份验证
错误是:
'object | 类型的参数未定义' 不可分配给类型'SetStateAction
' 的参数。类型'未定义' 不可分配给类型'SetStateAction '
const [User, setUser] = useState(false);
const [UserData, setUserData] = useState("");
const signin=async()=>{
setProgress(10)
const UserInfo=await signInWithGoogle(); // UserInfo is a json object
setUser(true)
setUserData(UserInfo) //error here......
console.log(UserData);
setProgress(100)
}
const signout=async()=>{
console.log("sign out");
setProgress(30)
alert("Press OK to Log Out")
signOutWithGoogle()
setProgress(70)
setUser(false)
// User?alert("signed out successfully"):""
setProgress(100)
}
好吧,你用“”一个空字符串启动了 UserData,然后你期望一个对象,打字稿不会这样:
首先尝试:
const [userData, setUserData] = useState<any>({});
如您所期望的对象,并接受任何类型的数据
一旦您知道您真正得到的结果类型,您就可以准确指定并 创建一个类型,例如:(这取决于您在用户中使用的类型)
type User { id: string,
email: string,
username: string,
}
并像这样使用它:
const [userData, setUserData] = useState<User>({
id:"",
email:"",
username:""
});
最后在使用 setUser 数据之前使用 try catch 和未定义条件:
try {
const UserInfo = await signInWithGoogle(); // Assume this returns a User object or undefined
if (UserInfo !== undefined) {
setUser(true);
setUserData(UserInfo);
} else {
throw new Error("User info is undefined");
}
} catch (error) {
console.error("Failed to fetch user data", error);
}