Vuex: Должны ли действия всегда использовать мутации? - PullRequest
0 голосов
/ 25 октября 2018

Если действия являются единственными процессами, которые манипулируют значениями хранилища, могут ли они делать это напрямую или они все равно должны всегда использовать мутации?Может ли действие установить значение переменной напрямую?Здесь нет асинхронных событий, только вычисления.

Простой пример ...

actions: {
    resetToZero (state) {
    state.amount = 0
    state.display = ''
    state.color = black
    }

Спасибо, Брайан

1 Ответ

0 голосов
/ 02 ноября 2018

Это неправильно "... действия - это единственные процессы, которые манипулируют значениями магазина".

Единственный способ действительно изменить состояние в хранилище Vuex - это зафиксировать мутацию.

Действия могут зафиксировать мутации, если это необходимо:

actions: {
  increment ({ commit }) {
    commit('increment')
  }
}

Мы также можем зафиксировать мутации из компонента, если это необходимо:

this.$store.commit('increment')

Чтобы ответить на ваш вопрос: Да, вы всегда должны фиксировать мутацию (использовать мутации), если необходимо изменить состояние (я).С учетом вышесказанного, я не думаю, что vuex остановит вас от изменения состояния непосредственно из действий, но это не лучшая практика.Даже не лучшая практика, вы используете магазин Vuex неправильно.Кроме того, вы потеряете преимущество отслеживания, где меняются все состояния (что является причиной возникновения мутаций).

Действия используются исключительно для бизнес-логики (вычисления), асинхронных вызовов (действия не имеютсодержать асинхронные вызовы) и совершать мутации (при необходимости).Мутации используются исключительно для изменения состояний (в мутациях не должно быть логики).

В приведенном вами примере resetToZero не имеет логики и только изменяет состояния.Это неправильное использование магазина vuex.Таким образом, вам нужно перейти resetToZero к мутациям.И в любое время, когда вам нужно resetToZero, вам нужно commit('resetToZero').

Этот пост может вам помочь: Vuex Action против мутаций

...