我尝试检查用户输入的字符串在我写入之前是否已存在于我的数据库中。
这是我目前所拥有的:
火力地堡:
players id: playerContent: Firstname Lastname
class PlayerForm extends Component {
constructor(props) {
super(props);
this.state= {
newPlayerContent: '',
exists: null
};
this.writePlayer = this.writePlayer.bind(this);
this.checkIfUserExists = this.checkIfUserExists.bind(this);
}
checkIfUserExists(newPlayerContent) {
var playersRef = firebase.database().ref().child('players');
playersRef.once('value', function(snapshot) {
if (snapshot.hasChild(newPlayerContent)) {
this.setState({ exists });
}
})
}
writePlayer(){
if(this.exists !== null){
this.props.addPlayer(this.state.newPlayerContent);
this.setState({
newPlayerContent: '',
})
}
else{
console.log("This player already exists.")
}
}
无论如何,它一直允许它进入。我有点不确定 checkIfUserExists 功能,特别是如果我在firebase中访问我的数据。我将newPlayerContent的内容输出到控制台,实际上是我输入的内容,但我不确定支票是否正在完成其工作。有什么突出的吗?
提前致谢。
答案 0 :(得分:0)
我使用重复而不是存在..但是这段代码似乎完全符合我的意愿。如果已经在名称字段(playerContent)中看到该播放器名称,则不允许您向数据库添加其他人。
var playersRef = firebase.database().ref();
playersRef.child('players').orderByChild("playerContent").equalTo(newPlayerContent).once("value",snapshot => {
const userData = snapshot.val();
if (userData){
console.log("exists!");
this.state.duplicate = true;
console.log(this.state.duplicate)
}
else{
console.log("does not exist.")
this.state.duplicate = false;
console.log(this.state.duplicate)
}
});
在writePlayer函数中:
if(this.state.duplicate !== true){
this.props.addPlayer(this.state.newPlayerContent);
this.setState({
newPlayerContent: '',
})
}
else{
console.log("This player already exists.")
}
以为,这确实会引发警告 -
不要直接改变状态。使用setState() 反应/无直接突变状态