Изменения объекта после его отправки в хранилище Vuex отражаются в хранилище

#javascript #vue.js #vuex

Вопрос:

Чтобы создать новую запись, я определяю объект записи в функции компонентов data() и привязываю его к полям формы с помощью v-model . Этот объект затем передается действию Vuex, которое отправляет новую запись на серверную часть, а затем отправляет объект соответствующему мутатору.

Проблема в том, что при внесении изменений в исходный объект, определенный в data (), они, по-видимому, каскадируются в объект, который был помещен в хранилище.

Я понимаю концепцию передачи по ссылке, но, похоже, на этот шаблон не следует влиять. Есть ли лучший шаблон для использования при создании новой записи БД?

Добавить запись Vue

 lt;v-text-field  v-model="newRecord.name" /gt; ... export default {  data() {  return {  newRecord: {}  }  } } ... methods: {  addRecord(){  this.addRecordAction(this.newRecord)  ...  this.newRecord.name = 'new name' // lt;== reflects in vuex store!  } }  

Магазин записей Vuex

 async addRecordAction({commit}, newRecord){  const response = await axios.post('/api/record', newRecord)  newRecord = response.data // contains record's new ID  commit('addRecordMutation', newRecord) } ... addRecordMutation: (state, newRecord) =gt; (state.records.push(newRecord))  

Комментарии:

1. Может быть, попробовать дождаться addRecordAction звонка.

Ответ №1:

Поскольку ваше действие добавления является асинхронным, this.newRecord.name = «новое имя», вероятно, выполняется до операции добавления, и, следовательно, поскольку вы передали ссылку, добавляемый объект имеет новое имя.

Самое простое решение «дождаться» добавления записи перед установкой имени.