Dans ce projet, je souhaite définir l'état de l'Usertype à l'aide des données que j'ai récupérées à partir de la base de données Firebase. La récupération de la Firebase fonctionne correctement mais je ne peux pas régler l'état d'UserType de là
import React from 'react'; import { StyleSheet, Text, View, TouchableOpacity, TextInput, Image } from 'react-native'; import * as firebase from 'firebase'; export default class Home extends React.Component { constructor(props){ super(props) this.state=({ userId:firebase.auth().currentUser.uid, userType:'f' }) } componentDidMount() { this.readUserData(); }; readUserData=()=> { userstype= 'users/'+ this.state.userId + '/userType' firebase.database().ref(userstype).on('value', function (snapshot) { this.state=({userType:snapshot.val()}) }); alert(this.state.userType) } render() { return ( <View style={styles.container}> <Text style={styles.titleText}>Taams</Text> <Text style={styles.edition}>Developer's Edition</Text> <Text style={styles.titleText}>Home</Text> <Text>Alpha 0.0.0.1</Text> </View>
3 Réponses :
Utilisez uniquement this.state = {} code> dans le constructeur. Partout ailleurs, il devrait être.
firebase.database().ref(userstype).on('value', function (snapshot) {
this.setState({userType:snapshot.val()})
});
Obtenir une erreur non définie n'est pas une fonction (évaluant 'this.setystate ({Usertype: instantané.val ()})
D'accord. Ma prochaine étape consisterait à essayer et assurez-vous que la valeur d'instantané est disponible pour installer le système d'enveloppement en emballage dans une condition .. `firebase.database (). Réf (usertype) .on (" valeur ", fonction (instantanée) {Si (snapshot.val ()) {this.setystate ({Usertype: instantané.val ()})}}); "
Et vous voudrez peut-être modifier votre question pour refléter la réponse donnée par @ NIKA95 et moi-même. C'est définitivement la bonne façon de définir l'état.
Avec la version correcte de l'instate? Ensuite, je console.log (snapshot.val ()) ci-dessus SetState Assurez-vous que l'instantané.val () est disponible.
Quand j'ai défini une alerte (Snapshot.val ()). Il donne la sortie correcte. Mais ce n'est pas la fixation de l'état
Je l'ai corrigé. Maintenant, il fonctionnait bien LisaRisserData = () => {usersType = 'utilisateurs /' + firebase.auth (). CurrentUser.UID + '/ Usertype' firebase.database (). Réf (usertype) .Once ("valeur"). Ensuite (SnapSh Ot => {this.state = ({UTYPE: Snapshot.val ()})})
Pour définir l'état, essayez de faire comme suit au lieu de this.state = ({USERTYPE: SNAPSHOT.VAL ()}) CODE>:
this.setState ({Usertype: instantané.val ()}); code> p>
Je l'ai corrigé. Maintenant, il fonctionnait bien LisaRisserData = () => {usersType = 'utilisateurs /' + firebase.auth (). CurrentUser.UID + '/ Usertype' firebase.database (). Réf (usertype) .Once ("valeur"). Ensuite (SnapSh Ot => {this.state = ({UTYPE: Snapshot.val ()})})
firebase.database().ref(userstype).on('value', (snapshot) => { this.setState({userType: snapshot.val()}) }); This might be a context issue. Without binding the anonymous function, you'll lose the original context. Try using an ES6's arrow function and this.setState({})
Je l'ai corrigé. Maintenant, il fonctionnait bien LisaRisserData = () => {usersType = 'utilisateurs /' + firebase.auth (). CurrentUser.UID + '/ Usertype' firebase.database (). Réf (usertype) .Once ("valeur"). Ensuite (SnapSh Ot => {this.state = ({UTYPE: Snapshot.val ()})})