Reactjs 如何将useEffect与firebase';什么是正确的签名方法?
当前代码Reactjs 如何将useEffect与firebase';什么是正确的签名方法?,reactjs,firebase,react-native,Reactjs,Firebase,React Native,当前代码 const[uid,setUid]=React.useState(null); useffect(()=>{ 如果(!uid){ firebase.auth().onAuthStateChanged((用户)=>{ 如果(用户){ const{uid}=user; setUid(uid); }否则{ 身份验证; } }); } }); 从'app/config/ENV'导入{ENV}; 从“firebase”导入firebase; const{firebaseConfig}=ENV;
const[uid,setUid]=React.useState(null);
useffect(()=>{
如果(!uid){
firebase.auth().onAuthStateChanged((用户)=>{
如果(用户){
const{uid}=user;
setUid(uid);
}否则{
身份验证;
}
});
}
});
从'app/config/ENV'导入{ENV};
从“firebase”导入firebase;
const{firebaseConfig}=ENV;
firebase.initializeApp(firebaseConfig);
导出默认值{
意为{
firebase.auth();
},
};
如果未登录,用户需要使用firebase的
方法登录
这是可行的,但我不确定这个代码是否正确
如果您能给我任何建议,我将不胜感激。您的代码将导致每次呈现组件时多次调用firebase.auth
,直到填充uid
。虽然这可能有效,但似乎并不可取。最好只在组件第一次装载时运行该代码块一次:
const [uid, setUid] = React.useState(null);
useEffect(() => {
firebase.auth().onAuthStateChanged((user) => {
if (user) {
const { uid } = user;
setUid(uid);
} else {
Authentication.signInAnonymously();
}
});
}, []);
// ^^ use an empty dependency array - this is very important
// to ensure the above block runs exactly once, when component mounts
非常感谢你。我需要了解有关useffect
的更多信息。我在想setUid(uid)代码>在首次登录时不起作用,因为组件装载时块只运行一次。如果您能解释一下,我将不胜感激。当您设置状态时,该状态将永远存在,直到组件卸载或状态变量再次更改。所以setUid
一次,在挂载时,就可以正常工作了。谢谢。但是,Authentication.signinanoymously()代码>,此部分不setUid
,对吗?所以我想知道为什么setUid
起作用:(如果您不需要在状态中区分尚未加载的Firebase和正在匿名登录的用户,这很好。如果您确实需要识别匿名登录的用户,则需要另一个状态变量,如isAnonUser
。谢谢。因此,每次setState
发生时,都会调用useffect
?