Я использую хранилище Vuex, но я думаю, что этот вопрос все равно будет применяться, если вы не используете магазин.
Согласно документации Vue, правильным способом установки нескольких свойств объекта является использование Object.assign()
и создание нового объекта.
export default {
state: {
eventDateMoment : {}
},
mutations : {
initialiseDate(state, payload) {
state.eventDateMoment = Object.assign({}, state.eventDateMoment, moment(payload.eventDate, 'YYYY-MM-DD'));
}
}
}
Насколько я могу видеть, это копирует только поля. Он не копирует методы. Итак, как мне хранить объект, который включает методы?
Я нашел два подхода, которые, похоже, работают, но я им не доверяю, поскольку они противоречат правилам, изложенным в документации Vue. Я сомневаюсь, что они будут вести себя как отзывчивое имущество при любых обстоятельствах.
Первый подход - просто переназначить свойство в мутаторе.
mutations : {
initialiseDate(state, payload) {
state.eventDateMoment = moment(payload.eventDate, 'YYYY-MM-DD'));
}
}
Второй подход - установить начальное значение хранилища на мгновенный объект, а затем использовать Object.assign
для слияния новых свойств без создания нового объекта.
export default {
state: {
eventDateMoment : moment()
},
mutations : {
initialiseDate(state, payload) {
state.eventDateMoment = Object.assign(state.eventDateMoment, moment(payload.eventDate, 'YYYY-MM-DD'));
}
}
}
Насколько я вижу, ни одно из них не является приемлемым. Итак, каков правильный способ хранения объекта с помощью методов?
Ваш подход с привязкой выглядит хорошо, он гарантирует, что все основные методы и свойства экземпляра момента присутствуют и переопределяют их в мутации, это нормально. Не переоценивайте Object.assign
-method, метод Vue.set
более рекомендуется, как вы можете видеть в документации здесь. Vuex docs, устанавливающий начальный моментный объект в состоянии, использует метод Vue.set
под капотом.