В чём разница между Action и Mutation?
Состояние и Pinia
В Vuex mutation — единственный способ синхронно изменить состояние, а action — место для асинхронной логики, которое в итоге вызывает мутации.
Mutation
mutations: {
setUser(state, user) {
state.user = user;
},
},- Строго синхронная функция.
- Получает
stateи меняет его напрямую. - Вызывается через
commit('setUser', user); каждая мутация видна в devtools.
Action
actions: {
async loadUser({ commit }, id) {
const user = await api.getUser(id);
commit('setUser', user);
},
},- Может быть асинхронным: запросы, таймеры.
- Не меняет state напрямую, а вызывает мутации.
- Вызывается через
dispatch('loadUser', id).
В Pinia разделения нет: в actions можно сразу менять состояние.
Коротко для собеседования
Mutation — синхронное изменение state через commit, action — асинхронная логика через dispatch, которая вызывает мутации.
Подробнее: Vuex — Actions