@100R

Почему в action не передается второй параметр?

Почему в action не передается второй параметр? Если убрать первый параметр, то id передается и все работает. Как только ставлю два, то id = undefined.

С кнопками все понятно. Как быть с самим input? Пример, который я нашел в документации, не работает, когда в action передаётся ещё и id. То есть, e.target.value = undefined. Без id работает нормально.

Component

<div class="quantity">
    <button @click="updateQuantity('increment', item.id)">+</button>
    <input type="number" :value="item.quantity">
    <button @click="updateQuantity('decrement', item.id)">-</button>
</div>

Action

updateQuantity: ({commit}, lalala, id) => {
    commit(lalala, id);
}

Корзина:

export default {

    namespaced: true,
    strict: true,

    state: {

        items: [

            {
                id: 0,
                quantity: 1
            },

            {
                id: 1,
                quantity: 1
            }

        ]

    },

    mutations: {

        add: (state, id) => {

            state.items.push(

                {
                    id,
                    quantity: 1
                }

            );

        },

        remove: (state, id) => {

            let index = state.items.findIndex(item => item.id === id);

            state.items.splice(index, 1);

        },

        increment: (state, id) => {

            let item = state.items.find(item => item.id === id);

            item.quantity++;

        },

        decrement: (state, id) => {

            let item = state.items.find(item => item.id === id);

            item.quantity--;

        },

    },

    actions: {

        addOrRemove: ({state, commit}, id) => {

            let item = state.items.find(item => item.id === id);

            if (!item) {
                commit('add', id);
            } else {
                commit('remove', id);
            }
        },

        updateQuantity: ({commit}, lalala, id) => {

            commit(lalala, id);

        }

    }

}
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
bootd
@bootd
Гугли и ты откроешь врата знаний!
Потому что экшены не умеют принимать 100500 параметров. Параметр должен быть 1 - объект с 100500 свойствами.

P.S. Я хз почему так происходит, баг это или фича, но это так. В глубинку я не залазил и не изучал. У меня есть догадки лишь, связанные с тем, что 1й аргумент всегда зарезервирован под стор. Да и объектами выглядит лучше, не нужно порядок соблюдать и их можно так же удобно как и аргументы вывести
updateQuantity: ({commit}, {lalala, id}) => {
            commit('setData', {lalala, id});
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы