Скажем, у меня есть хранилище vuex, подобное этому ...
state: {
docs: null,
adds: [],
deletes: [],
},
actions: {
// initialize docs to an array of objects
init (context, payload) {
}
}
getters: {
// get the docs plus the adds, minus the deletes
docs (state) {
}
},
mutations: {
// add a doc, keeping track that it was added
addDoc (state, payload) {
}
// remove a doc, keeping track that it was deleted
removeDoc (state, payload) {
}
}
Я думаю, у меня есть два варианта реализации: либо изменить массив документов на установщиках, либо вычислить эффективное значение массива на геттере.Является ли одна из этих идей намного хуже, чем другая, либо с точки зрения реактивности, либо с точки зрения производительности?
Другими словами:
// choice 1: really mutate the docs
addDoc (state, payload) {
state.adds = [...state.adds, ...payload]
state.docs = _.without([...state.docs, ...payload], state.deletes)
}
// choice 2: mutate the docs in effect, via the getter
addDoc (state, payload) {
state.adds = [...state.adds, ...payload]
}
// choice 2, in getter
docs(state) {
return _.without([...state.docs, ...payload], state.deletes)
}
Предполагается, что мутация производится нечасто, а геттер вызывается частоя плачу вычислительный штраф с выбором 2?Или, поскольку результаты геттера кэшируются (я думаю?), Действительно ли два подхода примерно одинаковы?Это бросок монеты о том, каким путем идти, или есть принцип, который я могу использовать, чтобы решить?- Спасибо