在此项目中,我想使用从Firebase数据库检索的数据设置userType的状态。从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>
答案 0 :(得分:1)
要设置状态,请尝试执行以下操作,而不要执行this.state=({userType:snapshot.val()})
:
this.setState({ userType:snapshot.val() });
答案 1 :(得分:0)
仅在构造函数中使用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()})
});
答案 2 :(得分:0)
firebase.database().ref(userstype).on('value', (snapshot) => {
this.setState({userType: snapshot.val()})
});
这可能是上下文问题。如果不绑定匿名函数,您将失去原始上下文。尝试使用ES6的箭头功能和this.setState({})