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
时,它显示了参考子女失败。这是我得到的错误细节。我的Firebase数据库图片在这里。你能告诉我我要去哪里了。我想访问数据库的"标志"一部分。CSE8
应与用户stream_sem
匹配谢谢你提前
首次称为rendercontent时,您的状态为空字符串,请记住,firebase快照将异步加载。另外,请勿将听众连接到通过渲染方法调用的渲染函数中,您最终会有很多听众。
您的逻辑应该是:
- 从firebase获取用户数据
- 如果数据不是null,请设置状态
- 设置状态后,从数据库获取出勤数据
- 适当设置状态
在跳跃状态之前,请始终写粗糙的算法(如果您已经知道这一点,请忽略)。快乐学习,欢呼!