Вопрос проверяет понимание архитектуры централизованного хранилища состояния и разделения ответственности во Vuex.
state хранит данные приложения. mutations отвечают за синхронное изменение состояния. actions используются для асинхронной логики и в итоге вызывают mutations. Такое разделение делает управление состоянием предсказуемым и прозрачным. Это ключевая идея Vuex.
Vuex строится вокруг чёткого разделения ролей между разными сущностями хранилища.
state — это единый источник истины.
Особенности:
хранит данные приложения
реактивен
используется компонентами для отображения UI
Пример:
state: {
user: null,
isLoading: false
}
mutations отвечают за изменение состояния.
Особенности:
всегда синхронные
единственный допустимый способ изменить state
легко отслеживаются при отладке
Пример:
mutations: {
setUser(state, user) {
state.user = user;
}
}
actions инкапсулируют бизнес-логику.
Особенности:
могут быть асинхронными
не изменяют state напрямую
вызывают mutations
Пример:
actions: {
async fetchUser({ commit }) {
const user = await api.getUser();
commit('setUser', user);
}
}
Компонент вызывает action
Action выполняет логику
Action коммитит mutation
Mutation изменяет state
state, mutations и actions образуют предсказуемый поток данных, упрощающий управление сложным состоянием приложения.