Реакция компонента более высокого порядка на firebase authenticate не отправляет обновленное состояние компоненту - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок, чтобы реагировать, и я пытаюсь аутентифицироваться с помощью firebase в реакции.Я создал компонент более высокого порядка, чтобы существенно обогатить компонент статусом пользователя и проверить, аутентифицирован ли пользователь или нет.Ниже мой WithAuthentication.js и в самом компоненте в componentDidmount я пытаюсь проверить, если пользователь isSignedin.

import React, { Component } from 'react';
import { FirebaseContext } from '../firebase';

export default WrappedComponent => {
class WithAuthentication extends Component {
    state = {
    user:null,
    isSignedin:false
    };

    componentDidMount() {

        let firebase = this.context       
        firebase.auth().onAuthStateChanged(user => {
        if (user) {
        console.log(user)  
        this.setState({ 
            user: user.providerData,
            isSignedin: true
        });
        console.log(this.state.isSignedin);
        } else {
        console.info('Must be authenticated');          
        }
    });
    }

    render() {
    return this.state.isSignedin ? (
        <WrappedComponent
        {...this.props}
        user={this.state.user}
        isSignedin={this.state.isSignedin}
        />
    ) : (
        <WrappedComponent
        {...this.props}
        user={"NOTUSER"}
        isSignedin={this.state.isSignedin}
        />
    );
    }
}
WithAuthentication.contextType =FirebaseContext
return WithAuthentication;
};

Файл компонента.

componentDidMount() {
let firebase = this.context
console.log(this.props);    
const db = firebase.firestore();
var turmarkers =[];

this.setState({isSignedin:this.props.isSignedin})
console.log(this.state.isSignedin);    
this.state.isSignedin  ? 
db.collection("Markets").get().then((querySnapshot) => {
  querySnapshot.forEach((doc) => {
      var mdata = doc.data()
      mdata["key"] = doc.id  
      turmarkers.push(mdata)

  });

  this.setState({
      mapdata:turmarkers
  });
 })    
:
console.log("this is not a user")    
}

При первом рендеринге дочерний компонент получает ложный тег, а после WithAuthentication.js изменяет состояние isSignedin на true.Я ожидаю, что состояние дочернего компонента будет обновлено, как только будет обновлено состояние оболочки.Но этого не происходит.Состояние в компоненте оболочки обновляется, но не передается дочернему элементу.

Я попытался напрямую проверить реквизиты isSignedin, чтобы увидеть, меняется ли он у ребенка и нет.

1 Ответ

0 голосов
/ 11 февраля 2019

Я думаю, что нашел ответ, ключ в том, чтобы проверить, выполнена ли аутентификация или нет, а затем проверить, подтвердила ли аутентификация пользователя как вошедшего в систему или нет.Вот где ответили.

Аутентификация и реакция Firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...