我正在制作一个聊天应用程序,并尝试实现一个函数,该函数可删除onClick事件中的已单击消息,但我收到错误“index.esm2017.js:1032 Uncaught(in promise)TypeError:无法读取undefined(阅读'indexOf')"的属性。我正在为数据库使用firebase。有人能看看我的代码有什么问题吗?谢谢。
const [messages, setMessages] = useState([]);
const adminUid = "";
useEffect(() => {
const colRef = collection(db, "messages");
const colRefOrdered = query(colRef, orderBy("createdAt"));
onSnapshot(colRefOrdered, (snapshot) => {
setMessages(
snapshot.docs.map((doc) => {
return {
id: doc.id,
message: doc.data()
};
})
)
})
})
const deleteHandle = async() => {
const docRef = doc(db, "messages", messages.id);
await deleteDoc(docRef);
}
if (adminUid === auth.currentUser.uid) {
return (
<div className="Chatroom">
<div className="chatsChatroom">
{messages.map(({ message, id }) => (
<div>
<div key={id}
className={`msg ${message.uid === auth.currentUser.uid ? "sent" : "received"}`}>
<img src={message.photoURL} className="senderProfilePicture" />
<div className="senderName">
<p> {message.displayName} </p>
</div>
<div className="text">
<p> {message.text} </p>
</div>
<div className="deleteChat">
<h3 onClick={deleteHandle}> Delete </h3>
</div>
</div>
</div>
))}
</div>
<SendMessage />
</div>
)
}
1条答案
按热度按时间2vuwiymt1#
出现此错误的原因是
messages.id
的值可能未定义,这是因为您试图访问整个messages
数组的键id
。您需要的只是要删除的消息的id
。当你Map
messages
数组来显示每一条消息时,你的message
对象必须有一个键id
。你需要把这个值传递给你的deleteHandle
方法:在此之后,您需要接受函数参数中的
message.id
值:这只会传递您要删除的消息的ID,希望这对您有所帮助。如果有帮助,请接受这个答案!谢谢