【问题标题】:Vuex + firebase database actionsVuex + firebase 数据库操作
【发布时间】: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)

标签: javascript firebase vue.js firebase-realtime-database vuex


【解决方案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');
        });
}

这是最好的方法。

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2020-06-22
    • 2021-04-28
    • 2020-04-26
    • 2020-11-23
    • 1970-01-01
    • 2019-06-11
    • 2021-07-14
    • 2022-01-23
    相关资源
    最近更新 更多