javascript - 如何使用 onSnapshot 通过 Redux 更新 props
问题描述
我正在学习如何编码,我真的在努力解决以下问题:
我正在构建一个聊天应用程序,我需要在提交新消息后立即显示它们。于是,我想到了使用onSnapshot()。每次我在基本的一页练习中使用 onSnapshot() 时,它都有效。但是,现在我有一个包含 3 个文件夹(src;public;functions)的项目。对于我的所有功能,我使用 this.props.functionName() 获取/发送数据并使用 Redux 管理状态,然后后端将返回一个承诺。
我的问题是,我如何使用 onSnapshot 来更新我的道具,因为我不能调用函数也不能使用 return。
我尝试直接在组件中使用 admin sdk,但 firebase 在控制台中发出警告说我应该只在后端使用它。
基本上,如何在不调用函数的情况下将以下数组发送到我需要发送到的组件?
exports.messages = (req, res) => {
db.collection('messages').onSnapshot(snapshot => {
let messages = [];
snapshot.forEach(doc => {
messages.push(doc.data())
});
})
}
提前致谢!
解决方案
您可以在本教程中找到一种更新可能适合您的 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)
推荐阅读
- javascript - 将 dot.delimited 对象引用转换为字符串 (javascript)
- matlab - 迭代地将 Matlab 嵌套结构更改为矩阵以绘制直方图
- php - PHPSpreadsheet - 条件格式 - 单元格上的多个条件
- java - 什么可能导致网格生成旋转?LWGL
- python - python 正则表达式 - ConnectionProfile:Database:MSSQL
- svn - 如何在存储库中保留“忽略”的文件?
- python - 如何为其值是包含不同类型的单个值的列表的字典构造棉花糖模式?
- mysql - 我的不和谐机器人上的数据库(Discord.js + mysql)
- sql - 您可以使用连接来创建包含缺失值的表吗?
- android - 当应用程序关闭或手机处于打盹模式时在android中执行后台任务