firebase实时数据库 - 反应本地参考儿童失败



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快照将异步加载。另外,请勿将听众连接到通过渲染方法调用的渲染函数中,您最终会有很多听众。

您的逻辑应该是:

  1. 从firebase获取用户数据
  2. 如果数据不是null,请设置状态
  3. 设置状态后,从数据库获取出勤数据
  4. 适当设置状态

在跳跃状态之前,请始终写粗糙的算法(如果您已经知道这一点,请忽略)。快乐学习,欢呼!

相关内容

  • 没有找到相关文章

最新更新