PassFront
  1. PassFront
  2. База знаний
  3. Состояние и Pinia

В чём разница между 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

Другие вопросы раздела