правильный способ использования конструктора с реквизитом? - PullRequest
0 голосов
/ 19 февраля 2020

Когда я печатаю на консоль, он говорит, что auth не загружен и, следовательно, нет auth.uid. Почему?

    constructor(props) {
        super(props);
        this.state = {
            auth : props,
            links : props.auth.uid ? <SignedInLinks /> : <SignedOutLinks />
        };   
    }

...

const mapStateToProps = (state) => {
    return {
        auth: state.firebase.auth
    }
}
export default connect(mapStateToProps)(Navbar);

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я должен был использовать не this.state.auth.isLoaded, а this.props.auth.isLoaded. Я не использовал конструктор или что-то еще.

0 голосов
/ 19 февраля 2020

В вашем this.state вы не имеете в виду?

auth : props.auth

Может быть проще определить состояние вне конструктора:

// Inside your component but not inside the constructor:

state = {
  auth : this.props.auth,
  links : this.props.auth.uid ? <SignedInLinks /> : <SignedOutLinks />
};   

Но даже если вы просто вставка ваших реквизитов состояния редукса в состояние вашего компонента. Почему? Почему бы просто не читать напрямую из состояния притока, например, так?

class MyComponent extends React.Component{

  render(){
    return this.props.auth.uid ? <SignedInLinks /> : <SignedOutLinks />
  }

}

const mapStateToProps = (state) => {
    return {
        auth: state.firebase.auth
    }
}
export default connect(mapStateToProps)(Navbar);
...