使用 vuexfire 动态绑定 firebase 集合列表

Posted

技术标签:

【中文标题】使用 vuexfire 动态绑定 firebase 集合列表【英文标题】:Dynamically bind a list of firebase collections with vuexfire 【发布时间】:2020-12-20 10:32:00 【问题描述】:

我在 vuex 商店中有一个 firebase 文档列表,该列表会动态更新。我想用 vuexfire 动态绑定该列表中的文档。

state: 
   docsToBind: [], // dynamic: this gets updated so I cannot hardcode a few bindings
   documents:  // bind documents here?
,
actions:
   bindOne: firestoreAction(( state, bindFirestoreRef ) => 
      return bindFirestoreRef(...)
      ),
   bindAll(state)
   for(const doc of state.docsToBind)
       // bind the document to a dictionary item?
   ,
   unbindTeam(state)
      // whenever a doc is removed from the listunbind it
      

这是正确的做法吗?

注意:我无法绑定整个集合,因为客户端无法访问所有文档。所以我需要在docsToBind中绑定子集

【问题讨论】:

我不清楚你到底想要达到什么目的。使用 Vuexfire,当您绑定时,您应该只提供要绑定的状态键和源(集合、查询或文档)。因此,如果您想绑定到集合的子集,则需要绑定到 Query,因此您需要知道 Query 定义(即子集的定义)。 谢谢你的答案。那么查询绑定到集合中的多个文档是什么?这就是我在文档中找不到的内容。 你想如何查询这个集合?基于特定领域? 我想绑定到一个文档列表,所以我有一个文档ID列表。 myCollection.doc(id1), ..., myCollection.doc(idn) 不,但我想我必须解决这个问题。你应该把它变成一个答案:) 【参考方案1】:

使用 Vuexfire,当您绑定时,您应该只提供要绑定的状态键和源(集合、查询或文档)。

因此,如果您想绑定到集合的子集,则需要绑定到 Query,因此您需要知道 Query 定义(即子集的定义)。

如果您想在“一个操作”中绑定一组文档(其定义是动态的,例如通过变量 id 列表标识的一组文档),您可能需要使用另一种方法。

您可以定义一个查询,例如,通过在文档中有一个带有 ID 的字段并使用 in 运算符将同一字段上的最多 10 个相等 (==) 子句与逻辑 @ 987654325@.

或者您需要创建自己的自制绑定,例如在 Vuex 操作中使用 Promise.all()

【讨论】:

以上是关于使用 vuexfire 动态绑定 firebase 集合列表的主要内容,如果未能解决你的问题,请参考以下文章

Vuexfire 将 Firestore 集合绑定到 Object 而不是 List

Vuexfire bindFirestoreRef 不等待绑定完全解决

Firestore、vue、vuex、vuexfire:如何让 getter 真正从存储中获取数据?

Vuexfire serialize 选项未正确格式化数组

Javascript ES6 如何将 const 函数转换为函数

为啥 vuexfire 不更新状态而是正确更新 ui?