所以我用React Native和Firebase做了一个项目。
以下是我的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),并更新州
但有时当我通过模拟器调试我的程序时,状态不会更新。
你能帮助我解决这个问题并告诉我这里发生了什么吗? 提前致谢