我正在学习如何编码,而我真的在以下问题上苦苦挣扎:
我正在构建一个聊天应用程序,我需要在提交新消息后立即显示它们。结果,我想到了使用onSnapshot()。每当我在基本的一页练习中使用onSnapshot()时,它就会起作用。但是,现在我有一个包含3个文件夹的项目(src; public; functions)。对于我的所有功能,我使用this.props.functionName()获取/发送数据,并通过Redux管理状态,然后,后端将返回Promise。
我的问题是,在无法调用函数或使用return的情况下,如何使用onSnapshot更新道具。
我尝试直接在组件中使用admin sdk,但是firebase在控制台中发出了一条警告,说我只能在后端使用它。
基本上,如何在不调用函数的情况下将以下数组发送到需要将其发送到的组件?
exports.messages = (req, res) => {
db.collection('messages').onSnapshot(snapshot => {
let messages = [];
snapshot.forEach(doc => {
messages.push(doc.data())
});
})
}
谢谢!
答案 0 :(得分:0)
您可以在this tutorial中找到更新可能适合您的Firebase道具的方法。他们使用的示例代码为:
useEffect(() => {
const unsubscribe = props.firebase
.db.collection('myCollectionName')
.onSnapshot(snapshot => {
if (snapshot.size) {
// we have something
** Handle returned data **
} else {
// it's empty
}
})
return () => {
unsubscribe()
}
}, [props.firebase])
还有另一个用于处理返回的数据:
let myDataArray = []
snapshot.forEach(doc =>
myDataArray.push({ ...doc.data() })
)
setData(myDataArray)