我正在使用Expo和Firebase创建一个会议应用程序(如f8应用程序)。
组件“TalkInfo”有一个函数addOrRemoveUserTalk(loggedUser, talk)
,当你触摸某些Talk的Like / Dislike按钮时触发,而状态“buttonText”可能是“Like”或“Dislike”文本中的按钮:
this.state.buttonText == 'Dislike'
单击按钮,应用程序将从db this.state.buttonText == 'Like'
该应用为用户创建“userTalk”。我有一个问题:我可以在db中添加userTalk,我可以删除它,但是如果我再次添加相同的userTalk,firebase添加它,并立即删除它
请掌握firebase的人可以帮助我吗?
addOrRemoveUserTalk(loggedUser, talk) {
var text = 'Like';
if(this.state.buttonText == 'Dislike') {
firebaseApp.database().ref().child('userTalks')
.orderByChild('user')
.equalTo(loggedUser.uid)
.on('child_added', (snap) => {
userTalk = snap.val();
if(userTalk.talk == talk.id) {
text = 'Like';
console.log("CHILD WILL BE DESTROYED");
snap.ref.remove();
}
})
} else {
text = 'Dislike';
console.log("CHILD WILL BE ADDED");
firebaseApp.database().ref().child('userTalks').push({
user: loggedUser.uid,
talk: talk.id,
}).key;
}
console.log("text in addOrRemoveUserTalk_________", text);
text == 'Like' ?
this.setState({ buttonText: 'Like' }) :
this.setState({ buttonText: 'Dislike' })
}
答案 0 :(得分:0)
现在每当你第一次"喜欢"一个帖子,你添加了一个永远保持"活性。你想要的只是读取一次值,然后停止监视它。作为数字评论,您希望使用once()
代替on()
。
if(this.state.buttonText == 'Dislike') {
firebaseApp.database().ref().child('userTalks')
.orderByChild('user')
.equalTo(loggedUser.uid)
.once('child_added', (snap) => {
userTalk = snap.val();
if(userTalk.talk == talk.id) {
text = 'Like';
console.log("CHILD WILL BE DESTROYED");
snap.ref.remove();
}
})
} else {
text = 'Dislike';
console.log("CHILD WILL BE ADDED");
firebaseApp.database().ref().child('userTalks').push({
user: loggedUser.uid,
talk: talk.id,
}).key;
}