Понимание геттеров Vuex и мутаций - PullRequest
1 голос
/ 31 марта 2019

Скажем, у меня есть хранилище 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?Или, поскольку результаты геттера кэшируются (я думаю?), Действительно ли два подхода примерно одинаковы?Это бросок монеты о том, каким путем идти, или есть принцип, который я могу использовать, чтобы решить?- Спасибо

1 Ответ

1 голос
/ 31 марта 2019

Хм да, геттеры кэшируются.Так что в этом случае просто подбросьте монетку, я думаю.Лично я предпочитаю делать вычисления на геттерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...