Javascript 如何添加Firebase实时数据库的删除数据功能

Javascript 如何添加Firebase实时数据库的删除数据功能,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我通过React和Firebase创建聊天系统。 聊天系统的数据由Firebase实时数据库管理。 现在,请点击这里 网址: Github: 我正在尝试创建数据删除函数。 然而,我找不到可以放入child中的元素。 因为,我不能使用删除代码 我调用了firebase文档,并考虑使用update和set等实现删除功能。 但是,由于无法指定child,因此它们都不能使用 您想分享如何在Firebase RealtimeDatabae中识别子对象,还是实现数据删除功能 现在代码在这里。 App.js

我通过React和Firebase创建聊天系统。 聊天系统的数据由Firebase实时数据库管理。 现在,请点击这里 网址: Github:

我正在尝试创建数据删除函数。 然而,我找不到可以放入child中的元素。 因为,我不能使用删除代码

我调用了firebase文档,并考虑使用update和set等实现删除功能。 但是,由于无法指定child,因此它们都不能使用

您想分享如何在Firebase RealtimeDatabae中识别子对象,还是实现数据删除功能

现在代码在这里。 App.js

从“React”导入React,{Component} 从“firebase/app”导入firebase 从“./firebase/firebase”导入{firebaseApp,firebaseDB} 从“./components/ChatMessage”导入ChatMessage const firebaseDB=firebase.database const messagesRef=firebaseDB.ref'messages' 类应用程序扩展组件{ 构造器{ 超级作物 此.state={ 正文:, 用户名:, 信息:[] } } 组件将安装{ messagesRef.on'child_added',snapshot=>{ 常数m=snapshot.val console.log{m} 让msgs=this.state.messages 推送{ “text”:m.text, “用户名”:m.user\u name } 这是我的国家{ 信息:msgs } } } 渲染{ 回来 メッセージログ {this.state.messages.mapm,i=>{ 回来 }} } } 导出默认应用程序; ChatMessage.js

从“React”导入React,{Component} 从“../firebase/firebase”导入{firebaseDB} const firebaseDB=firebase.database const messagesRef=firebaseDB.ref'messages' 类ChatMessage扩展组件{ onRemoveClick{ console.logmessagesRef.childkey } 渲染{ 回来

{this.props.message.text}

由{this.props.message.user_name}

削除 } } 导出默认聊天室消息 谢谢。

为什么不能使用删除功能

删除数据的最简单方法是在对的引用上调用remove 该数据的位置

还可以通过指定null作为另一次写入的值来删除 设置或更新等操作。您可以将此技术用于 更新以删除单个API调用中的多个子项

为了获得密钥,每次添加一个子项时,您都必须将密钥存储在数据结构中,并附带对消息的一些引用,以供以后使用。在您添加的子事件处理程序上,您可以通过snapshot.key在回调中获取它

在remove message事件处理程序中,从数据结构中检索正确的密钥并调用:

messagesRef.child(key).remove()
考虑到您当前的实现,将键值添加到消息对象。在应用程序中,componentWillMount方法:

在ChatMessage onRemoveClick方法中:


谢谢你仔细的评论。我决定实施删除按钮的原因是,我不仅想学习React的学习,还想学习Firebase的学习和数据库操作。我根据您的建议实现了它,但this.props.message.key没有加载“onRemoveClick”。所以我现在在问如何解决这个问题。如果您知道,请配合。发生这种情况是因为该方法未绑定到正确的上下文。您必须在ChatMessage构造函数中调用this.onRemoveClick=this.onRemoveClick.bindthis。但是,您应该将此解决方案调整为另一个线程中建议的解决方案。感谢您添加评论。你的评论解决了我的问题。非常感谢你。
msgs.push({
   'text' : m.text,
   'user_name' : m.user_name
   'key': snapshot.key
 })
 messagesRef.child(this.props.message.key).remove()