Я не могу установить состояние в React Native - PullRequest
0 голосов
/ 30 января 2019

В этом проекте я хочу установить состояние userType, используя данные, которые я получил из базы данных firebase.загрузка из firebase работает правильно, но я не могу установить оттуда состояние userType

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 ]

0 голосов
/ 30 января 2019

Чтобы установить состояние, попробуйте сделать следующее вместо this.state=({userType:snapshot.val()}): this.setState({ userType:snapshot.val() });

0 голосов
/ 31 января 2019
firebase.database().ref(userstype).on('value', (snapshot) => {
  this.setState({userType: snapshot.val()})
});

Возможно, это проблема контекста.Без привязки анонимной функции вы потеряете исходный контекст.Попробуйте использовать функцию стрелки ES6 и this.setState ({})

0 голосов
/ 30 января 2019

Используйте только this.state ={} в конструкторе.В любом другом месте это должно быть.

this.setState({}) 

, поэтому измените

    firebase.database().ref(userstype).on('value', function (snapshot) {
  this.state=({userType:snapshot.val()})
});

на

    firebase.database().ref(userstype).on('value', function (snapshot) {
  this.setState({userType:snapshot.val()})
});
...