Я новичок, чтобы реагировать, и я пытаюсь аутентифицироваться с помощью 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, чтобы увидеть, меняется ли он у ребенка и нет.