const { width: WIDTH } = Dimensions.get('window');
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd;
}
if (mm < 10) {
mm = '0' + mm;
}
today = mm + dd + yyyy;
class Attendance extends Component {
state = {
image: null,
submit: false,
loading: false,
face: null,
confidence: 0,
class: '',
flag: ''
};
async componentDidMount() {
await Permissions.askAsync(Permissions.CAMERA);
const { currentUser } = firebase.auth();
firebase
.database()
.ref('users/')
.child(currentUser.uid)
.on('value', snap =>
this.setState({
face: snap.val().image,
class: snap.val().stream_sem
})
);
}
render(){
return(
<View style={styles.Conatiner}>
<Loader loading={this.state.loading} />
{this.renderContent()}
</View>
);
}
renderContent = () => {
firebase.database().ref('attendance')
.child(this.state.class)
.child(today)
.on("value", snap => {
this.setState({ flag: snap.val().flag});
});
if(this.state.flag === "0") {
//**something**
}
else {
//**something**
}
}
}
当我尝试写this.state.class
时,它显示参考子项失败。 Here是我得到的错误详细信息。
我的Firebase数据库Picture在这里。你能告诉我我要去哪里错了。我想访问数据库的“标志”部分。 CSE8
应该与用户stream_sem
相匹配
提前谢谢您
答案 0 :(得分:1)
第一次调用renderContent时,state.class为空字符串,请记住,firebase快照将异步加载。另外,不要在render方法调用的render函数中将侦听器附加到firebase上,否则最终会有很多侦听器。
您的逻辑应该类似于:
总是在将状态转移到dev之前编写粗略的算法(如果您已经知道,则忽略它)。学习愉快,干杯!