Я использую vue с vuex для настройки веб-приложения.В этом приложении я хотел бы сохранить некоторые редактируемые пользователем данные в состоянии vuex в форме объекта, содержащего редактируемые свойства, например {firstname: "", lastname: ""}
, но мне сказали, чтобы я попытался убрать наблюдателей для мониторинга изменений в объекте и каким-то образомсделать приложение способным хранить измененный объект в состоянии.
Я попытался получить состояние из хранилища и вставить его в vue-мгновение и позволить пользователям редактировать поля, которые были привязаны к свойству объекта, т.е. v-model:detail.firstname
, где detail
- объект, полученный из хранилища vuex.И, очевидно, консоль выдает ошибки «не изменяйте данные хранилища вне мутации» при изменении значений.Я понял, что это значит, поэтому потом я сделал это примерно так:
Шаблон:
<input type="text" v-model="detail.firstname" />
<br />
<input type="text" v-model="detail.lastname" />
Сценарий:
data() {
return {
detail: {}
}
},
created: function () {
// initialize this.detail with Object.assign to clone from another object etc.
},
watch: {
'detail': {
handler: function (val) {
debugger;
this.setTabStorageItem({ key: "modifyingDetail", value: val });
},
deep: true
}
}
Я знаю, что изменение значений не должносделано из мутации, так что я не собираюсь ссылаться на detail
напрямую из геттера и изменять этот объект напрямую.Но, как я уже сказал, мне сказали не использовать наблюдателя для изменения значения.Но если так, то единственным решением, о котором я мог подумать, была бы ссылка на detail
непосредственно из getter, так что v-модель сделала бы работу по изменению свойств объекта, заданного, когда пользователь редактирует, и проблема возвращается в состояние мутации из-за мутации.
Есть ли какое-нибудь другое решение, которое я мог бы попробовать, не используя watcher?
И я думаю, что в этом примере показана еще одна проблема: она всегда заменяет весь объект новым.Это звучит так, как будто это создаст ненужную загрузку на страницу, потому что все изменения состояния используют новый объект.(и простите за то, что я не включил это в заголовок / в другой вопрос) Решение этого может привести к тому, что тот, кто сказал мне не использовать watcher, согласен с использованием watcher.Или, если на самом деле нет других вариантов, они просто сказали бы мне использовать его в любом случае.