Vuex — это официальная библиотека управления состоянием (state management) для Vue.js, реализующая паттерн Flux/Redux, но адаптированная для экосистемы Vue.
Единственный источник истины (SSOT) для данных приложения. Все компоненты получают данные отсюда, а не хранят локально.
const store = new Vuex.Store({
state: {
count: 0,
user: null
}
})
Как computed-свойства для хранилища. Позволяют вычислять производные состояния.
getters: {
doubleCount: state => state.count * 2
}
Единственный способ изменить состояние. Должны быть синхронными.
mutations: {
increment(state) {
state.count++
}
}
Для асинхронных операций. Вызывают mutations для изменения состояния.
actions: {
async fetchUser({ commit }, userId) {
const user = await api.fetchUser(userId)
commit('SET_USER', user)
}
}
Для организации больших хранилищ на разделенные части.
const moduleA = {
state: () => ({ ... }),
mutations: { ... }
}
const store = new Vuex.Store({
modules: {
a: moduleA
}
})
✅ Сложное приложение с множеством компонентов
✅ Несколько компонентов используют одни данные
✅ Частое изменение одних и тех же данных
❌ Простое приложение (можно обойтись provide/inject или event bus)
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
user: null,
todos: []
},
getters: {
completedTodos: state => state.todos.filter(todo => todo.completed)
},
mutations: {
SET_USER(state, user) {
state.user = user
},
ADD_TODO(state, todo) {
state.todos.push(todo)
}
},
actions: {
login({ commit }, credentials) {
return api.login(credentials)
.then(user => commit('SET_USER', user))
}
}
})
Vuex — это мощное решение для управления состоянием в Vue-приложениях, обеспечивающее предсказуемость данных через строгий однонаправленный поток. Хотя для новых проектов на Vue 3 рекомендуется Pinia, понимание Vuex остается важным навыком для работы с legacy-кодом.