Reactjs 尝试在用户登录react js时从DB启用最新的测验级别

Reactjs 尝试在用户登录react js时从DB启用最新的测验级别,reactjs,algorithm,debugging,Reactjs,Algorithm,Debugging,我有禁用和启用级别按钮的逻辑,如新手、学生、中间人、专家、大师等。我想要的是将数据发送到db,以便当用户注销并重新登录时,他处于最新级别,例如,如果他正在做级别专家并注销。当他登录时,他应该启用所有按钮直到专家,因为这是他停止的地方。我不知道如何将数据库中的数据分配到状态 这是按钮 <Button onClick={() => { this.changeToquiz1();

我有禁用和启用级别按钮的逻辑,如新手、学生、中间人、专家、大师等。我想要的是将数据发送到db,以便当用户注销并重新登录时,他处于最新级别,例如,如果他正在做级别专家并注销。当他登录时,他应该启用所有按钮直到专家,因为这是他停止的地方。我不知道如何将数据库中的数据分配到状态

这是按钮

 <Button
                  onClick={() => {
                    this.changeToquiz1();
                    this.articelState();
                  }}
                >
                  Rookie
                </Button>
                <Button
                  disabled={this.state.level < STUDENT}
                  onClick={() => {
                    this.articelState();
                    this.changeToquiz2();
                  }}
                >
                  Student
                </Button>
                <Button
                  disabled={this.state.level < INTERM}
                  onClick={() => {
                    this.changeToquiz3();
                    this.articelState();
                  }}
                >
                  Intermediate
                </Button>
                <Button
                  disabled={this.state.level < EXPERT}
                  onClick={() => {
                    this.changeToquiz4();
                    this.articelState();
                  }}
                >
                  Expert
                </Button>
                <Button
                  disabled={this.state.level < MASTER}
                  onClick={() => {
                    this.changeToquiz5();
                    this.articelState();
                  }}
                >
                  Master
                </Button>
DB调用以检索数据 我只对排名感兴趣

    retrieveData = () => {
    fire.auth().onAuthStateChanged(user => {
      if (user) {
        var ref = fire
          .database()
          .ref("data")
          .limitToLast(1);
        //takes the last data in DB

        var userUID = fire.auth().currentUser.uid;
        var query = ref.orderByChild("ID").equalTo(userUID); //retrieves data about only the current logged in user
        console.log(userUID);
        query.once("value", snapshot => {
          let currentState = this.state.people;

          const currentUser = snapshot.val();
          for (let i in currentUser) {
            currentState.push({
              email: currentUser[i].UserEmail,
              UserAnswer: currentUser[i].UserAnswer,
              Questions: currentUser[i].Question,
              id: currentUser[i].ID,
              Score: currentUser[i].Score,
              levelRook: currentUser[i].UserLevel,
              levelStudent: currentUser[i].UserLevelStudent,
              levelIntermediate: currentUser[i].UserLevelIntermediate,
              levelExpert: currentUser[i].UserLevelExpert,
              levelMaster: currentUser[i].UserLevelMaster,
              rank: currentUser[i].RankValue
            });
          }
          // this.setState({
          // level: this.state.rank
          // });

          // currentState.push(user);
          console.log(currentState);

          this.setState({
            people: currentState,
            dataHasLoaded: true
            //  level: rank
          });
        });
      } else {
        console.log("no user");
      }
    });
  };

有关此问题的任何帮助,请感谢

您的数据库调用在哪里?@goto1抱歉,它在这里--rank:currentUser[i]。RankValue这有rank值(值介于1到4之间),但不确定在哪里使用它包括示例中的所有相关代码,如果没有代码的其余部分,很难找出问题所在。您显示的只是一个
for
循环,其余部分在哪里?您想在
状态下存储的
当前用户[idx]
中使用什么?你能提供一个最小的可重复的例子吗?现在我看到的是片段,但很难获得完整的图片。@goto1 see更新
const STUDENT = 1;
    const INTERM = 2;
    const EXPERT = 3;
    const MASTER = 4;
    retrieveData = () => {
    fire.auth().onAuthStateChanged(user => {
      if (user) {
        var ref = fire
          .database()
          .ref("data")
          .limitToLast(1);
        //takes the last data in DB

        var userUID = fire.auth().currentUser.uid;
        var query = ref.orderByChild("ID").equalTo(userUID); //retrieves data about only the current logged in user
        console.log(userUID);
        query.once("value", snapshot => {
          let currentState = this.state.people;

          const currentUser = snapshot.val();
          for (let i in currentUser) {
            currentState.push({
              email: currentUser[i].UserEmail,
              UserAnswer: currentUser[i].UserAnswer,
              Questions: currentUser[i].Question,
              id: currentUser[i].ID,
              Score: currentUser[i].Score,
              levelRook: currentUser[i].UserLevel,
              levelStudent: currentUser[i].UserLevelStudent,
              levelIntermediate: currentUser[i].UserLevelIntermediate,
              levelExpert: currentUser[i].UserLevelExpert,
              levelMaster: currentUser[i].UserLevelMaster,
              rank: currentUser[i].RankValue
            });
          }
          // this.setState({
          // level: this.state.rank
          // });

          // currentState.push(user);
          console.log(currentState);

          this.setState({
            people: currentState,
            dataHasLoaded: true
            //  level: rank
          });
        });
      } else {
        console.log("no user");
      }
    });
  };