我正在构建一个react应用程序,在其中我使用firebase进行身份验证。代码如下:
function signIn(){
firebase.auth().signInWithPopup(provider).then(function(result)=>{
console.log(result.user);
setUserInfo(result.user);
console.log(userInfo);
}).catch(function(error)=>{
console.log(error.message);
});
}
const [userInfo, setUserInfo] = useState({});
现在,当控制台日志记录结果为.user时,数据是完美的。但是,当我将它分配给userInfo并控制台记录它时,它会返回一个空对象,其中包含类似于的内容
{proto}
对useState
钩子的setter的调用是异步的,因此不能在调用setUserInfo
之后直接记录状态变量。
如果您想获得更新状态,可以使用useEffect
挂钩。但在你目前的then()
听众中,我建议你坚持使用result.user
。
另请参阅:
- useState是同步的吗
- useState集方法没有立即反映更改