Vuex - обновить объект в мутации

После того, как пользователь нажмет кнопку, я хочу заменить данные в моем хранилище vuex данными из моего локального объекта. Но я застрял в мутации. Вот код для более подробной информации.

Это метод, который вызывается после того, как пользователь нажмет кнопку. (this.tableview — локальный объект с теми же значениями, что и объект vuex)

            updateVuexTableview() {
                // eslint-disable-next-line no-console
                console.log("Update Vuex Table view");
                this.updateTableview(this.tableview)
            }

В этом методе вызывается мое действие vuex. Это выглядит так: (updTableview — это новые данные, которые я хочу вставить)

async updateTableview({commit}, updTableview) {
        const response = await axios.put(
            `http://localhost:3000/tableview`,
            updTableview
        );

        // eslint-disable-next-line no-console
        console.log(response.data);

        commit('updateTableviewMut', response.data);
    },

Это называется мутация. Вот где я застрял. Я попытался вытолкнуть данные и снова отправить их, но пока ничего не работает.

    updateTableviewMut: (state, updTableview) => {
        state.tableview.push(updTableview)
    },

Вот это мое состояние:

const state = {
    tableview: {
        "thema_c": true,
        "status_c": true,
        "priority_c": true,
        "custom1_c": true,
        "custom2_c": true,
        "customFieldName1": "Custom1",
        "customFieldName2": "Custom2"
    },
};

person HTLWelsITLover99    schedule 17.02.2020    source источник
comment
state.tableview не является массивом, это объект, поэтому вы не можете использовать .push для этого   -  person Nipun Jain    schedule 17.02.2020
comment
Итак, вы можете добраться до updateTableviewMut ?   -  person Nipun Jain    schedule 17.02.2020
comment
Да мутация называется. Я знаю, как обновить элемент массива, но не объект.   -  person HTLWelsITLover99    schedule 17.02.2020
comment
Вы не можете обновить такой объект, вы можете обновить такой объект, state.tableview['keyname'] = updTableview где вы должны указать ключевое имя для этого элемента. Также вы можете обновить, как выглядит ваш updTableview   -  person Nipun Jain    schedule 17.02.2020
comment
Большое спасибо, приятель! state.tableview = updTableview у меня работает. Не думал, что это будет так легко.   -  person HTLWelsITLover99    schedule 17.02.2020
comment
Добро пожаловать @HTLWelsITLover99. Хорошо, что он решает вашу проблему. Могу ли я попросить вас принять мой ответ.   -  person Nipun Jain    schedule 17.02.2020


Ответы (1)


Вы не можете обновить объект .push, вам нужно переназначить объект или задать конкретное поле. Просто измените свой код следующим образом: Если вы хотите добавить пару значений ключа, вы можете сделать это:

updateTableviewMut: (state, updTableview) => {
  state.tableview['keyname'] = updTableview
}

Или, если вы хотите переназначить объект, вы можете сделать:

updateTableviewMut: (state, updTableview) => {
  state.tableview = updTableview
}

person Nipun Jain    schedule 17.02.2020