Vuex-обновление всего объекта внутри массива


Vuex-обновление всего объекта внутри массива

21.03.2019 10:16:43 Просмотров 30 Источник

Внутри моей мутации Vuex я хочу заменить элемент массива в моем состоянии, как показано ниже:

UPDATE_MAILING(state, mailing) {
    let index = _.findIndex(state.mailings, {id: mailing.id});

    state.mailings[index] = mailing
}

Но это не обновляет мой шаблон, привязанный к этому массиву. Как я могу реактивно обновить элемент массива?

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

Ответы - Vuex-обновление всего объекта внутри массива / Vuex - Update entire object inside array

Tobias Mesquita

21.03.2019 10:31:15

Вы должны использовать Vue.$set (или this.$set внутри экземпляра Vue):

UPDATE_MAILING(state, mailing) {
    let index = state.mailings.findIndex(item => item.id === mailing.id)
    Vue.$set(state.mailings, index, mailing)
}

Документы: Vue.js → реактивность в глубине

tony19

26.03.2019 08:09:32

Как описано в документах, вы можете использовать либо Array.prototype.splice(), либо Vue.set() для реактивной замены элемента массива:

mutations: {
  UPDATE_MAILING(state, mailing) {
    const index = state.mailings.findIndex(x => x.id === mailing.id)
    state.mailings.splice(index, 1, mailing)

    // OR:
    Vue.set(state.mailings, index, mailing)
  }
}

Я предпочитаю splice здесь, так как он не требует импорта Vue, что также облегчает тестирование.

демонстрация

bin liu

31.03.2019 07:14:47

я хочу сказать вам, что если вы хотите использовать тип массива оператора, вам лучше использовать mthod, например splice slice pop push shift unshift, только вы используете thesel, шаблон может быть привязан к вашему массиву. Не используйте array[index] для оператора; надеюсь искренне помочь вам

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