国家有时不会更新

时间:2016-09-15 16:24:33

标签: javascript reactjs firebase react-native firebase-realtime-database

所以我用React Native和Firebase做了一个项目。

我的页面将是这样的: enter image description here

以下是我的Firebase数据库的结构:

appModels
 - profile
 - - KRhpx9jflO3eB2L6-bY
 - - - email: "yo1238@gmail.com"
 - - - house_id: "H1AuHfu3"
 - - - name: "yoyoyo"
 - - - phone: "02191239821"
 - - KRi_3InnKP2S8jYYBWs
 - - - email: "joe123@gmail.com"
 - - - house_id: "rJ23rB_n"
 - - - name: "jojojo"
 - - - phone: "09128391273"

以下是我的代码:

import React, { Component } from 'React';
import {
  View,
  Text,
  TextInput,
  TouchableOpacity,
  StyleSheet,
  Image
} from 'react-native';

import styles from '../../styles';
import { firebaseApp, profilesRef } from '../authentication';


module.exports = React.createClass({
  getInitialState(){
    return({
      email: '',
      phone: '-',
      name: '-',
      houseID: '-'
    })
  },


  componentDidMount(){
    let user = firebaseApp.auth().currentUser;

    this.setState({email: user.email})
    this.listenForItems(user, profilesRef); 
  },


  listenForItems(user, profilesRef){
    profilesRef.on('value', (snap) => {
      let contents = [];

      profilesRef.orderByChild("email").equalTo(user.email).on("value", function(snapshot) {
        snapshot.forEach(data => {
          contents.push({
            name: data.val().name,
            phone: data.val().phone,
            house_id: data.val().house_id
          })
        })
      });

      if (contents.length !== 0) {
        this.setState({
          phone: contents[0].phone,
          name: contents[0].name,
          houseID: contents[0].house_id
        })
      }
    })
  },

  render(){
    return(
      <View style={[styles.bodyAccount]}>
        <Text style={styles.textAccount1}>{this.state.name}</Text>
        <Text style={styles.textAccount2}>name</Text>
        <Text style={styles.textAccount1}>{this.state.email}</Text>
        <Text style={styles.textAccount2}>email</Text>
        <Text style={styles.textAccount1}>{this.state.phone}</Text>
        <Text style={styles.textAccount2}>phone</Text>
        <Text style={styles.textAccount1}>{this.state.houseID}</Text>
        <Text style={styles.textAccount2}>House ID</Text>
      </View>
    )
  }

})

我的代码背后的主要思想是,每次用户进入页面时,代码都会运行并在我的firebase中的个人资料子项中进行查询email == user.email来自身份验证,获取所有值(姓名,电话,house_id),并更新州 但有时当我通过模拟器调试我的程序时,状态不会更新。

你能帮助我解决这个问题并告诉我这里发生了什么吗? 提前致谢

0 个答案:

没有答案