firebase - Vuex 和 firebase 监听器
问题描述
我正在使用打字稿和 vuex 类装饰器。
在
created()
我的应用程序的 vue 组件的钩子中,我正在调用一个 vuex 操作listenToDataXY
,它本身调用一个单独的 api 文件中的函数,其中放置了 firestoreonSnapshot
方法/观察器。如果我理解正确,我不能只将该 api 函数的承诺返回给我的 vuex 操作,因为一旦检索到新数据,它就不会在未来再次触发。因此,我不想返回一个承诺,而是想
onSnapshot
直接从 api 文件的回调中改变状态(可以吗?)。为了做到这一点,我
mutations
直接输入了不访问状态。但是我还没有弄清楚如何正确地从与存储无关的文件(api 文件)中调用突变函数。我的 vue 组件通过 getter 检索更新的值。
为了实现上述目的,您通常如何以一种清晰的结构化方式设置您的代码/文件(监听 Firestore 更改并相应地更新状态)?
解决方案
好的,所以我所做的是以下内容:
// action.ts
getDataXY(context) {
context.commit('setLoading', true)
xyAPI.setupXYListener(context)
},
onXYChanged({ commit }, payload) {
commit('setLoading', false)
if (payload.xy) {
commit('setXY', payload.xy)
}
if (payload.err) {
commit('setErrorMessage', payload.err)
}
},
// xyAPI.ts
setupXYListener(context: any) {
xyCollection.onSnapshot(
snapshot => {
const xy = snapshot.docs[0].data()
context.dispatch('onXYChanged', { xy: xy, err: null })
},
err => {
context.dispatch('onXYChanged', { xy: null, err: err })
}
)
},
如果有人看到更好的架构、结构或其他改进,我非常感谢您的评论。
推荐阅读
- google-cloud-firestore - Firestore 规则:在已定义规则的空集合上获得权限被拒绝
- css - SVG 中的阴影不是多重的,并且在不同的背景上颜色不同
- flutter - 如何获取 DocumentSnapshot 以按文档 ID 查询
- python - 从 find_all_palindromes 函数创建一个longest_palindrome 函数
- c++ - OpenCV:使用 PGM 文件。为什么我生成的 PGM 文件有 3 个通道 (RGB)?
- or-tools - Google ORTools - 不能共享相同路由的节点
- python - 如果我只传递一个参数,为什么会得到 TypeError?
- core-data - SwiftUI:Core Data @FetchRequest 和 List 显示托管对象 - 在 lockscreemn 上丢失数据
- sql - 为什么此选择不选择任何行
- java - 如何使用java在mysql中插入枚举列类型