具有onAuthStateChanged

时间:2020-04-25 13:45:27

标签: javascript reactjs firebase firebase-authentication

很抱歉,如果我的问题已经提出。 我是反应的初学者,我真的很想学习如何做并理解。 我在我的React.JS项目上使用Firebase,并且无论用户是否连接,我都希望切换标题的一部分。

我认为使用条件渲染,但是在(if)之后的firebase函数上不允许我执行setState()..或我有错误

因此,如果我们能帮助我或者给我跟踪寻找答案的位置,我将非常高兴!

class Header extends Component {

state={
  connected: null
}

render(){

  firebase.auth().onAuthStateChanged(function(user) {
    if (user) {


    } else {


    }
  });

  return (


<div className="backgroundheader">

<div className="liensheader">
  <a href="/" className="lili" style={{textDecoration: "none"}}>Home</a>
  <a href="/event" className="lili" style={{textDecoration: "none"}}>Manifestations</a>
  <a href="/commerces" className="lili" style={{textDecoration: "none"}}>Commerces</a>
  <a href="/tips" className="lili" style={{textDecoration: "none"}}>Tips</a>
</div>

{/* options header when the user is disconnect */}
{/* <Deader /> */}

{/* options header when the user is connected */}
{/* <Ceader /> */}

</div>
  );
  }
};
export default Header;

谢谢你,抱歉我的英语不好:/

1 个答案:

答案 0 :(得分:0)

onAuthStateChanged异步触发,因此您不能在render方法内直接使用它。每当遇到这种情况时,解决方案是将异步值放入状态,然后在render方法中使用状态。

类似这样:

class Header extends Component {
  state={
    connected: null
  }
  componentDidMount() {
    firebase.auth().onAuthStateChanged(function(user) {
      setState({ user: user });
    });    
  }
  render(){
    return (
<div className="backgroundheader">

<div className="liensheader">
  <a href="/" className="lili" style={{textDecoration: "none"}}>Home</a>
  <a href="/event" className="lili" style={{textDecoration: "none"}}>Manifestations</a>
  <a href="/commerces" className="lili" style={{textDecoration: "none"}}>Commerces</a>
  <a href="/tips" className="lili" style={{textDecoration: "none"}}>Tips</a>
</div>
{ user ? <Deader /> : <Ceader /> }
</div>
  );
  }
};
export default Header;

另请参阅: