В Vue-экосистеме шаблон управления состоянием (State Management Pattern) — это архитектурный подход к централизованному хранению и управлению данными приложения. Рассмотрим его ключевые компоненты:
Единственный источник истины для данных приложения. Все компоненты читают состояние отсюда, а не хранят локальные копии данных.
state: {
user: null,
products: [],
cart: []
}
Характеристики:
Аналоги computed-свойств для хранилища. Позволяют получать производные данные из состояния.
getters: {
totalCartItems: state => state.cart.reduce((total, item) => total + item.quantity, 0),
isAuthenticated: state => !!state.user
}
Особенности:
Единственный способ изменить состояние. Всегда синхронны.
mutations: {
ADD_TO_CART(state, product) {
const existingItem = state.cart.find(item => item.id === product.id)
existingItem
? existingItem.quantity++
: state.cart.push({ ...product, quantity: 1 })
}
}
Важные правила:
commit
в компонентах или actionsОбрабатывают асинхронные операции и бизнес-логику перед коммитом mutations.
actions: {
async checkout({ commit, state }, paymentDetails) {
const response = await api.processPayment({
items: state.cart,
payment: paymentDetails
})
commit('CLEAR_CART')
return response
}
}
Ключевые особенности:
Организационная структура для разделения хранилища на логические блоки.
const authModule = {
namespaced: true,
state: () => ({ user: null }),
mutations: { /* ... */ }
}
const store = {
modules: {
auth: authModule,
products: productsModule
}
}
Преимущества модулей:
namespaced: true
)Типичный поток данных в этом шаблоне:
dispatch
)commit
)// store/cart.js
export const useCartStore = defineStore('cart', {
state: () => ({ items: [] }),
getters: {
total: (state) => state.items.reduce((sum, item) => sum + item.price, 0)
},
actions: {
addItem(product) {
this.items.push(product)
}
}
})
основные компоненты шаблона управления состоянием (state, getters, mutations, actions, modules) создают строгую архитектуру для работы с данными в Vue-приложениях. Хотя конкретная реализация может отличаться (Vuex, Pinia), понимание этих концепций критически важно для создания поддерживаемых и масштабируемых приложений.