NextJs 错误 - 类型为“object |”的参数未定义'是

问题描述 投票:0回答:1

使用 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)

    
  }
reactjs firebase next.js firebase-authentication
1个回答
0
投票

好吧,你用“”一个空字符串启动了 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);
      }
© www.soinside.com 2019 - 2024. All rights reserved.