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