Vuex + firebase 数据库操作

Posted

技术标签:

【中文标题】Vuex + firebase 数据库操作【英文标题】:Vuex + firebase database actions 【发布时间】:2020-10-01 01:21:23 【问题描述】:

我在我的 Vuex 应用中使用 firebase。我在 vuex 中有这个动作

async deleteTodo( commit , id) 
        await fbs.database().ref(`/todolist/$store.state.auth.userId/$id`)
            .remove()
            .then(() => 
                // fix this
                console.log('Todo deleted', commit);
            )
    

如果我不需要提交某些内容,我如何跳过参数中的commit。我有类似“提交已分配但从未使用过”之类的错误

【问题讨论】:

不要解构对象,只使用占位符下划线:deleteTodo(_, id) 【参考方案1】:

deleteTodo( commit , id) 解构第一个参数。您的操作实际收到的是一个 context 对象,它有几个成员。 commit 就是其中之一。通过像这样解构它,你隐式地将它分配给一个局部常量,然后不要使用它。短绒不喜欢那样。如果你用deleteTodo(context, id) 替换它,你的 linter 很有可能会接受它。如果没有,您也可以使用deleteTodo(_, id),尽管我会选择前者。 (但您还想在此处解构其他内容……请阅读下文。)

虽然如果您没有在这些操作中提交任何内容,为什么在 Vuex 中会出现这种情况?您可以简单地将其放在任何独立功能中。 Vuex 专门用于管理状态。

啊,但你确实使用了状态!您使用store.state.auth.userId,但您从文件的本地常量访问它,大概是用于创建商店的文件,而不是商店的实际状态。在大多数情况下,这可能会正常工作,但这不是首选方式。

您知道在哪里还可以找到该州吗?在同一个上下文对象上!所以最好是这样重写它:

async deleteTodo( state , id) 
    await fbs.database().ref(`/todolist/$state.auth.userId/$id`)
        .remove()
        .then(() => 
            // fix this
            console.log('Todo deleted');
        );

这是最好的方法。

【讨论】:

以上是关于Vuex + firebase 数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

Vuex 和 Firebase 存储状态错误

Vuex 状态与 Firebase 同步

如何将 Firebase Firestore 数据添加到 s-s-r Nuxt Apps Vuex Store

从 vuex 模块中监听动作/突变

Vuex:Firebase 路由。如果语句

在 Nuxt JS vuex 中使用 Vue Router 重定向