使用 Vuex 操作 Firebase 集合中的文档 [Vuex/Vuexfire]

Posted

技术标签:

【中文标题】使用 Vuex 操作 Firebase 集合中的文档 [Vuex/Vuexfire]【英文标题】:Manipulating documents in Firebase collection with Vuex [Vuex/Vuexfire] 【发布时间】:2020-06-22 21:53:21 【问题描述】:

我有一个简单的问题,但我找不到答案。 我正在使用 Vuexfire 从 Vuex 中的 Firebase 导入数据。

const state = 
    ricettario: [] // data that contains all recipes (objects)

const actions = 
    // Get data from Firebase
    init: firestoreAction(( bindFirestoreRef ) => 
        bindFirestoreRef('ricettario', db.collection('ricettarioFirebase'))
    ),

它运行良好,但我想操作集合 'ricettarioFirebase' 的每个文档。使用 vue + firebase 很简单,使用 .get() 和 .then()

我找不到解决方案!我认为使用 GETTERS 是最好的方法,但我是 Vuex 和 Vuexfire 的新手,所以我不知道该怎么做。

特别是,我想转换这个(经典的firebase命令):

db.collection("ricettarioFirebase")
      .orderBy("data")
      .get()
      .then(snapshot => 
        snapshot.forEach(doc => 
          let ricetta = doc.data();
          ricetta.data = dayjs(ricetta.data)
            .locale("it")
            .format("D MMMM YYYY");
          ricetta.diffClass = ricetta.diff.split(" ").join("_");
          this.ricettario.push(ricetta);
        );
      );

在 Vuexfire 中。因此,将“ricettario[]”中的每个对象更改为“ricetta”,我想编辑“ricetta.diffClass”和“ricetta.data”

【问题讨论】:

【参考方案1】:

正如您将在 Vuexfire documentation 中看到的那样:

Vuexfire 不处理将数据写回 Firebase,因为您可以 直接使用 Firebase JS SDK 来精确更新你的任何东西 需要。

该文档提供了一些使用“标准”JS SDK 的示例,就像您在问题中所做的一样(“经典 firebase 命令”)。所以你必须走这条路,将数据库写入包装在 Vuex Actions 中。

【讨论】:

您好,感谢您的回复。在我提出问题之前,我查看了文档,但是在使用 VuexFire 绑定之后,我不明白如何使用 Firebase JS SDK。所以我必须在不同的操作或相同的“init()”操作中再次调用 db.collection('...')?或者我必须删除 VuexFIre 绑定并仅使用 Firebase JS SDK? 您可以并行使用它们。如果您已按照此 document 中显示的方式配置 Firebase,则可以在想要更新数据库时调用db.collection('...')在不同的操作中。看这里的代码示例:vuefire.vuejs.org/vuexfire/… 我只需要更改页面视图的项目,而不是直接在数据库集合的文档中。我想在收到文件后更改文件。该指南解释了如何只更新集合中的一个文档。我需要在创建页面后进行更改。所以循环将是从数据库获取数据 -> 将数据放入数组(状态) -> 更改数组中的每个对象( object.data = dayjs(object.data) ) -> 在页面视图中显示更新的状态 [已解决] 嗨 Renaud,我做到了!我使用了一个带有 forEach 函数的 getter。 getter(state) state.ITEMS.forEach((ITEM) => ITEM.data = dayjs(ITEM.data) .locale("it") .format("D MMMM YYYY") ) 返回 state.ITEMS

以上是关于使用 Vuex 操作 Firebase 集合中的文档 [Vuex/Vuexfire]的主要内容,如果未能解决你的问题,请参考以下文章

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

Vuex + firebase 数据库操作

Vuex 状态与 Firebase 同步

无法在动作中访问 vueX 中的对象值

Vuex 和 Firebase 存储状态错误

无法读取未定义的属性“电子邮件”; firebase 身份验证();使用 Vuex