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() |
| Цел | Запис на състоянието | Бизнес логика, асинхронни операции |