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