-1
votes

Je ne peux pas définir l'état dans le réagissariat

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>


0 commentaires

3 Réponses :


0
votes

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()})
});


6 commentaires

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 ()})})



1
votes

Pour définir l'état, essayez de faire comme suit au lieu de this.state = ({USERTYPE: SNAPSHOT.VAL ()}) : this.setState ({Usertype: instantané.val ()});


1 commentaires

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 ()})})



0
votes
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({})

1 commentaires

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 ()})})