Действия с базой данных Vuex + firebase


Действия с базой данных Vuex + firebase

11.06.2020 02:49:16 Просмотров 40 Источник

Я использую firebase в своем приложении с Vuex. У меня есть это действие в 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}in params, если мне не нужно что-то фиксировать? У меня есть ошибка типа "фиксация назначена, но никогда не использовалась".

У вопроса есть решение - Посмотреть?

Ответы - Действия с базой данных Vuex + firebase / Vuex + firebase database actions

mcv

11.06.2020 04:52:05

deleteTodo({ commit }, id) разрушает первый параметр. То, что на самом деле получает ваше действие, - это объект context, который имеет пару членов. commit-один из них. Деструктурируя его таким образом, вы неявно присваиваете его локальной константе, а затем не используете. Линта это не нравится. Если вы замените его на deleteTodo(context, id), есть хороший шанс, что ваш Линтер примет его. Если это не так, вы также можете использовать 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');
        });
}

Это лучший способ сделать это.

Помочь в развитии проекта:
Закрыть X