Sobes.tech
Middle

Разкажи ми за мутациите във Vuex.

sobes.tech AI

Отговор от AI

Мутациите в Vuex са единственият начин да промените състоянието на хранилището. Те са синхронни и приемат състоянието (state) като първи аргумент. Вторият аргумент може да бъде обект payload.

Дефинират се в обекта mutations на модула или на кореновото хранилище. Те се извикват с метода commit.

// Дефиниране на мутация
const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++ // Промяна на състоянието
    },
    incrementBy (state, payload) {
      state.count += payload.amount // Промяна на състоянието с payload
    }
  }
})

// Извикване на мутация
store.commit('increment')
store.commit('incrementBy', { amount: 10 })

Ключови точки:

  • Синхронни: Всички мутации се изпълняват синхронно, което осигурява предсказуемост на промените в състоянието.
  • Единствен начин: Само мутациите могат директно да променят състоянието.
  • commit: За извикване на мутации се използва методът store.commit().
  • Payload: Мутацията може да приеме втори аргумент - payload, съдържащ допълнителни данни.
  • Проследяване: Vuex Devtools следи всички извършени мутации, улеснявайки дебъгването.

Разлики с действията (actions):

  • Синхронни срещу асинхронни: Мутациите са синхронни, действията могат да съдържат асинхронни операции.
  • Директна промяна на състоянието срещу commit на мутации: Мутациите променят състоянието директно, действията commit-ват мутации.
Характеристика Мутации Действия
Синхронни Синхронни Могат да бъдат асинхронни
Промяна на състоянието Пряко променят състоянието Commit-ват мутации
Извикване store.commit() store.dispatch()
Цел Запис на състоянието Бизнес логика, асинхронни операции