Vuex двух коммитов в одном действии не вызывает часы - PullRequest
1 голос
/ 16 мая 2019

Когда я смотрю $store.stateA, функция обратного вызова для следующего, похоже, не срабатывает.

stateA: false

muationA(state,val){
 state.stateA = val  
}

actionA({commit},val) {
  commit('mutationA', true)
  commit('mutationB', false) //take this out would trigger the watch callback
}

Так в чем же дело? весь обратный вызов действия должен завершиться до того, как сработают функции наблюдения?

1 Ответ

2 голосов
/ 16 мая 2019

Как упоминалось в Nit, обе мутации отменяют друг друга, поскольку они выполняются синхронно. Прочитайте раздел « Реактивность в глубине » в документе для получения дополнительной информации. В частности (акцент мой):

Если вы еще не заметили, Vue выполняет обновления DOM асинхронно. Каждый раз, когда наблюдается изменение данных, он открывает очередь и буферизирует все изменения данных, которые происходят в одном и том же цикле событий. Если один и тот же наблюдатель запускается несколько раз, он будет помещен в очередь только один раз . Эта буферизованная дедупликация важна для избежания ненужных вычислений и манипуляций с DOM. Затем, в следующем цикле событий «tick», Vue очищает очередь и выполняет фактическую (уже очищенную) работу.

Другие решения для наблюдателей работают по-разному и сразу же запускаются при изменении значения (например, Backbone.js). Vue не работает таким образом.

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