这里是第一次海报!
当我尝试使用ReactJS和Firebase实时数据库构建一个小的运动管理器应用程序时,我遇到了Firebase push()方法的问题。
页面上有几个元素,它们被单击后将数据推入数据库,如下所示:
const planRef = firebase.database().ref("plan");
const currentExName = e.currentTarget.firstChild.textContent;
const exercise = {
name: currentExName,
type: e.currentTarget.children[1].textContent,
user: this.state.user.displayName
};
planRef.push(exercise);
此外,如果再次单击该元素,则将其从数据库中删除,如下所示:
planRef.orderByKey().on("value", snapshot => {
let exercises = snapshot.val();
for (let ex in exercises) {
if (exercises[ex].name === currentExName) {
planRef.child(ex).set(null);
}
}
});
只要我从数据库中删除最后一点数据时,不尝试将某些内容推入数据库,就可以正常工作。在这种情况下,它会立即被删除。
摘要:
ref.push()
ref.child(child).set(null)
删除数据(我之前尝试过remove()
,同样的问题)到目前为止,关于此类问题我什么都找不到,所以我想我可能在某个地方犯了一个错误。让我知道提供的信息是否足够。
谢谢。
答案 0 :(得分:0)
删除子项是异步操作。我猜这里发生的是删除操作比新的写入操作花费更多的时间。如果要再次用同一键写,则需要等待。
planRef.child(ex).set(null).then(() => {
planRef.child(ex).push(new);
});
或使用异步/等待:
await planRef.child(ex).set(null);
planRef.child(ex).push(new);
让我知道它是否有效。