Vuex - полное руководство по управлению состоянием во Vue приложениях

28 января 2026
Автор

Олег Марков

Введение

Vuex — это официальная библиотека для управления состоянием в приложениях на Vue 2 и Vue 3 (через совместимый пакет). Она помогает организовать данные так, чтобы разные компоненты могли предсказуемо их читать и изменять.

Смотрите, идея простая. Когда у вас один‑два компонента, вы спокойно передаёте данные через props и генерируете события вверх. Но как только приложение растёт, состояние начинает "расползаться" по разным частям, появляются дублирования и трудно отследить, кто и когда изменяет данные. Vuex решает именно эту проблему.

Ключевая мысль: Vuex вводит единый центр хранения данных — стор (store) — и строгие правила, как это состояние можно обновлять. Это делает поведение приложения более предсказуемым, а отладку — проще.

В этой статье вы увидите:

  • как устроен стор Vuex;
  • что такое state, getters, mutations, actions;
  • как подключать Vuex к Vue приложению;
  • как работать с модулями;
  • как организовывать код в реальных проектах.

Я буду показывать код с комментариями, чтобы вы могли шаг за шагом проследить, как всё работает.


Основные концепции Vuex

Одно хранилище для всего приложения

Vuex предлагает использовать один общий стор для всего приложения. Это не означает, что весь код будет в одном файле — наоборот, мы можем разбивать стор на модули. Но с точки зрения архитектуры состояние централизовано.

Схематично взаимодействие выглядит так:

  • Компонент не меняет состояние напрямую.
  • Компонент вызывает action (действие).
  • Action, при необходимости, выполняет асинхронный код.
  • Action вызывает mutation (мутацию).
  • Мутация синхронно изменяет state.
  • Компоненты "подписаны" на state и автоматически обновляются.

Такой однонаправленный поток данных сильно упрощает понимание, что и где происходит.

Из чего состоит стор Vuex

Стор Vuex — это объект со следующими основными частями:

  • state — данные;
  • getters — вычисляемые свойства над state;
  • mutations — синхронные изменения state;
  • actions — бизнес‑логика и асинхронный код;
  • modules — разбиение стора на части.

Давайте разберём каждую часть по отдельности.


State — централизованное состояние

Что такое state

State — это источник истинного состояния вашего приложения. Можно думать о нём как об одном большом объекте, содержащем все важные данные, которыми должны делиться компоненты.

Пример простого стора:

// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex) // Подключаем плагин Vuex к Vue 2

export default new Vuex.Store({
  // Здесь мы описываем глобальное состояние приложения
  state: {
    // Счётчик
    count: 0,
    // Пользователь
    user: {
      id: null,
      name: null,
      isAdmin: false
    },
    // Список задач
    todos: [] // Изначально список пустой
  }
})

State — это "источник правды". Компоненты не должны хранить свои копии этих данных, если они уже есть в сторе. Вместо этого они берут данные напрямую из store.

Как читать state в компонентах

Есть несколько способов получить доступ к state из компонента.

Через this.$store.state

Самый прямой путь:

// Пример компонента Counter.vue
export default {
  computed: {
    // Здесь мы объявляем вычисляемое свойство count
    // Оно будет брать данные из Vuex стора
    count() {
      return this.$store.state.count
    }
  }
}

Этот способ работает, но в больших компонентах код начинает "засоряться". Поэтому Vuex предлагает хелперы.

Через mapState

Хелпер mapState позволяет подключать свойства state как локальные вычисляемые свойства.

// Counter.vue
import { mapState } from 'vuex'

export default {
  computed: {
    // Здесь мы разворачиваем объект из mapState в локальные computed
    ...mapState({
      // Левое имя - имя локального computed
      // Правое выражение - путь к данным в state
      count: state => state.count,
      userName: state => state.user.name
    })
  }
}

Можно использовать более короткую запись, если имя совпадает:

import { mapState } from 'vuex'

export default {
  computed: {
    // В этом случае Vuex будет искать state.count и state.todos
    ...mapState(['count', 'todos'])
  }
}

Такой подход делает связи с состоянием явными и удобочитаемыми.


Getters — вычисляемые представления данных

Зачем нужны getters

В компонентах часто нужны не "сырые" данные, а их производные:

  • отфильтрованный список;
  • количество элементов по какому‑то условию;
  • комбинированные данные из разных частей state.

Конечно, вы можете считать это прямо в компонентах, но тогда логика будет дублироваться. Getters решают это: они похожи на computed‑свойства для store.

Пример использования getters

// store/index.js
export default new Vuex.Store({
  state: {
    todos: [
      { id: 1, text: 'Купить молоко', done: false },
      { id: 2, text: 'Написать статью', done: true }
    ]
  },
  getters: {
    // Возвращаем только выполненные задачи
    doneTodos(state) {
      // Здесь мы фильтруем массив по полю done
      return state.todos.filter(todo => todo.done)
    },
    // Возвращаем количество выполненных задач
    doneTodosCount(state, getters) {
      // Мы можем использовать другие геттеры внутри геттера
      return getters.doneTodos.length
    },
    // Геттер, который возвращает функцию - для параметров
    getTodoById: (state) => (id) => {
      // Здесь мы ищем задачу по идентификатору
      return state.todos.find(todo => todo.id === id)
    }
  }
})

Getters кэшируются так же, как computed. Пока зависимое состояние не меняется, геттер не будет пересчитываться.

Как использовать getters в компонентах

Точно так же, как state, через this.$store или mapGetters.

import { mapGetters } from 'vuex'

export default {
  computed: {
    // Подключаем геттеры в качестве computed-свойств компонента
    ...mapGetters(['doneTodos', 'doneTodosCount']),

    // Можем переименовывать локальные имена
    ...mapGetters({
      completed: 'doneTodos'
    })
  },
  methods: {
    showTodo(id) {
      // Когда геттер возвращает функцию, мы вызываем его как обычную функцию
      const todo = this.$store.getters.getTodoById(id)
      console.log(todo)
    }
  }
}

Getters помогают вынести повторяющуюся логику выборки и обработки данных из компонентов в одно место.


Mutations — единственный способ изменить state

Основной принцип

Очень важное правило Vuex:

  • НЕЛЬЗЯ изменять state напрямую из компонента.
  • МОЖНО изменять state только через mutations.

Почему так? Мутации:

  • всегда синхронные;
  • всегда явные;
  • легко отслеживаются в Vue Devtools.

Это позволяет понять, какие именно изменения были сделаны и в какой последовательности.

Пример мутаций

export default new Vuex.Store({
  state: {
    count: 0,
    todos: []
  },
  mutations: {
    // Простая мутация - увеличение счётчика
    increment(state) {
      // Здесь мы напрямую изменяем state
      state.count++
    },
    // Мутация с полезной нагрузкой (payload)
    setCount(state, newCount) {
      // Мы явно задаём новое значение счётчика
      state.count = newCount
    },
    // Мутация с объектом payload
    addTodo(state, payload) {
      // Ожидаем, что payload - это объект задачи
      state.todos.push(payload)
    }
  }
})

Обратите внимание: мутации всегда получают state первым аргументом, а вторым — полезную нагрузку (payload), если она нужна.

Как вызывать mutations из компонентов

Мутации вызываются через метод commit:

export default {
  methods: {
    increment() {
      // Вызываем мутацию increment
      this.$store.commit('increment')
    },
    setSpecificCount() {
      // Передаём конкретное значение счётчика
      this.$store.commit('setCount', 10)
    },
    addNewTodo() {
      // Передаём объект задачи
      this.$store.commit('addTodo', {
        id: Date.now(),
        text: 'Новая задача',
        done: false
      })
    }
  }
}

Для удобства есть хелпер mapMutations:

import { mapMutations } from 'vuex'

export default {
  methods: {
    // Здесь мы подключаем мутации как методы компонента
    ...mapMutations(['increment', 'addTodo']),

    // Можно переименовать локальный метод
    ...mapMutations({
      set: 'setCount'
    })
  }
}

Смотрите, я показываю простой пример: теперь вы можете в шаблоне писать @click="increment" и быть уверенными, что это приведёт к предсказуемому изменению state.


Actions — бизнес‑логика и асинхронность

Зачем нужны actions

Если мутации должны быть синхронными, то как быть с асинхронными операциями, например HTTP‑запросами? Для этого нужны actions.

Actions:

  • могут выполнять асинхронный код;
  • могут вызывать несколько мутаций;
  • могут вызывать другие actions;
  • инкапсулируют бизнес‑логику.

Важно: actions не изменяют state напрямую. Они вызывают мутации через commit.

Пример actions

// store/index.js
export default new Vuex.Store({
  state: {
    todos: [],
    isLoading: false,
    error: null
  },
  mutations: {
    setLoading(state, value) {
      // Устанавливаем флаг загрузки
      state.isLoading = value
    },
    setError(state, error) {
      // Сохраняем текст ошибки
      state.error = error
    },
    setTodos(state, todos) {
      // Заменяем список задач новыми данными
      state.todos = todos
    }
  },
  actions: {
    // Асинхронное действие для загрузки задач
    async fetchTodos({ commit }) {
      // Перед началом запроса включаем индикатор загрузки
      commit('setLoading', true)
      commit('setError', null)

      try {
        // Здесь мы выполняем асинхронный HTTP-запрос
        const response = await fetch('/api/todos')
        // Проверяем успешность ответа
        if (!response.ok) {
          throw new Error('Ошибка при загрузке задач')
        }
        const data = await response.json()
        // Сохраняем полученные задачи в state
        commit('setTodos', data)
      } catch (error) {
        // В случае ошибки записываем её текст
        commit('setError', error.message)
      } finally {
        // В любом случае отключаем индикатор загрузки
        commit('setLoading', false)
      }
    }
  }
})

В этом примере вы видите типичный паттерн: action управляет процессом, а мутации изменяют состояние шаг за шагом.

Как вызывать actions из компонентов

Actions вызываются через dispatch:

export default {
  methods: {
    loadTodos() {
      // Запускаем асинхронное действие
      this.$store.dispatch('fetchTodos')
    }
  },
  mounted() {
    // Например, загружаем данные при монтировании компонента
    this.loadTodos()
  }
}

Конечно, есть и хелпер mapActions:

import { mapActions } from 'vuex'

export default {
  methods: {
    // Подключаем действия как методы компонента
    ...mapActions(['fetchTodos']),

    // Переименование
    ...mapActions({
      loadTodos: 'fetchTodos'
    })
  }
}

Actions — правильное место для:

  • HTTP‑запросов;
  • вызова нескольких мутаций подряд;
  • выполнения сложной логики, зависящей от внешних данных.

Подключение Vuex к приложению Vue

Пример для Vue 2

Для Vue 2 процесс достаточно прямой.

// main.js
import Vue from 'vue'
import App from './App.vue'
import store from './store' // Импортируем стор

new Vue({
  store, // Подключаем стор ко всему приложению
  render: h => h(App) // Рендерим корневой компонент
}).$mount('#app')

После этого во всех компонентах будет доступен this.$store.

Пример для Vue 3

Vue 3 использует немного другой синтаксис, но сама идея та же.

// store/index.js
import { createStore } from 'vuex'

// Создаём стор с помощью функции createStore
export const store = createStore({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      // Увеличиваем счётчик
      state.count++
    }
  }
})
// main.js
import { createApp } from 'vue'
import App from './App.vue'
import { store } from './store' // Импортируем созданный стор

const app = createApp(App)

// Подключаем Vuex стор к приложению
app.use(store)

// Монтируем приложение в DOM
app.mount('#app')

Теперь во всех компонентах Vue 3 также будет доступен this.$store (в опциональном API) или useStore (в Composition API).


Vuex и Composition API

Доступ к стору через useStore

В приложениях на Vue 3 с Composition API удобнее использовать хук useStore.

// Counter.vue
import { computed } from 'vue'
import { useStore } from 'vuex'

export default {
  setup() {
    // Получаем экземпляр стора
    const store = useStore()

    // Создаём вычисляемое свойство, связанное со state.count
    const count = computed(() => store.state.count)

    // Создаём метод для увеличения счётчика через мутацию
    const increment = () => {
      store.commit('increment')
    }

    // Возвращаем свойства и методы в шаблон
    return {
      count,
      increment
    }
  }
}

Здесь вы видите, что логика становится чуть более "функциональной": мы явно берём store, создаём обёртки поверх state и mutations и возвращаем их.


Модули Vuex — структурирование большого стора

Зачем нужны модули

В реальном приложении один файл со всем state быстро становится громоздким. Чтобы избежать "гигантского" стора, Vuex поддерживает модули.

Модуль — это мини‑стор со своим state, mutations, actions и getters. Все модули соединяются в один общий стор.

Пример организации модулей

Допустим, у нас есть две области данных:

  • аутентификация пользователя;
  • список задач.

Смотрите, я покажу вам, как это разбить на модули.

// store/modules/auth.js
export const auth = {
  // Пространство имён по умолчанию выключено, рассмотрим его позже
  state: () => ({
    user: null,
    token: null
  }),
  mutations: {
    setUser(state, user) {
      state.user = user
    },
    setToken(state, token) {
      state.token = token
    },
    logout(state) {
      state.user = null
      state.token = null
    }
  },
  actions: {
    async login({ commit }, credentials) {
      // Здесь должен быть реальный HTTP-запрос к API авторизации
      // Для примера используем фейковые данные
      const fakeUser = { id: 1, name: 'Test User' }
      const fakeToken = 'abc123'

      // Сохраняем данные пользователя и токен
      commit('setUser', fakeUser)
      commit('setToken', fakeToken)
    }
  },
  getters: {
    isAuthenticated(state) {
      // Пользователь считается авторизованным, если есть токен
      return !!state.token
    }
  }
}
// store/modules/todos.js
export const todos = {
  state: () => ({
    items: []
  }),
  mutations: {
    setTodos(state, todos) {
      state.items = todos
    },
    addTodo(state, todo) {
      state.items.push(todo)
    }
  },
  actions: {
    async fetchTodos({ commit }) {
      // Здесь должен быть реальный HTTP-запрос
      const fakeTodos = [
        { id: 1, text: 'Пример задачи', done: false }
      ]
      // Сохраняем фейковые данные в state
      commit('setTodos', fakeTodos)
    }
  },
  getters: {
    completedTodos(state) {
      // Возвращаем только выполненные задачи
      return state.items.filter(t => t.done)
    }
  }
}

Теперь подключим модули к общему стору.

// store/index.js
import { createStore } from 'vuex'
import { auth } from './modules/auth'
import { todos } from './modules/todos'

// Создаём главный стор и регистрируем модули
export const store = createStore({
  modules: {
    auth,  // Модуль авторизации
    todos  // Модуль задач
  }
})

Доступ к модульному state и геттерам

Теперь state и getters разделены по модулям:

// Пример доступа в компоненте
export default {
  computed: {
    // Доступ к модульному state
    user() {
      return this.$store.state.auth.user
    },
    todos() {
      return this.$store.state.todos.items
    },
    // Доступ к модульному геттеру
    isAuthenticated() {
      return this.$store.getters.isAuthenticated
    }
  }
}

А вот с actions и mutations есть нюанс: имена по умолчанию попадают в глобальное пространство имён. Повторяющиеся названия будут конфликтовать. Для решения этого Vuex предлагает namespaced‑модули.


Модули с пространством имён (namespaced)

Зачем нужно namespaced

Если вы используете много модулей, названия мутаций и действий легко могут пересекаться: setLoading, setError, fetchData и так далее. Чтобы избежать конфликтов и сделать код более читаемым, можно включить namespaced: true.

// store/modules/auth.js
export const auth = {
  namespaced: true, // Включаем пространство имён для модуля
  state: () => ({
    user: null,
    token: null
  }),
  mutations: {
    setUser(state, user) {
      state.user = user
    }
  },
  actions: {
    async login({ commit }, credentials) {
      // Здесь могла бы быть реальная авторизация
      const fakeUser = { id: 1, name: 'Auth User' }
      commit('setUser', fakeUser)
    }
  },
  getters: {
    isAuthenticated(state) {
      return !!state.token
    }
  }
}

Теперь имена "полных" действий и мутаций будут выглядеть как auth/login, auth/setUser.

Вызов действий и мутаций у namespaced модулей

export default {
  methods: {
    // Вызов namespaced-действия
    login() {
      // Вызываем действие login из модуля auth
      this.$store.dispatch('auth/login', { email: 'a@b.c', password: '123' })
    }
  },
  computed: {
    isAuthenticated() {
      // Доступ к геттеру auth/isAuthenticated
      return this.$store.getters['auth/isAuthenticated']
    }
  }
}

mapActions и mapGetters с пространствами имён

Хелперы поддерживают указание имени модуля.

import { mapActions, mapGetters } from 'vuex'

export default {
  computed: {
    // Подключаем геттеры из модуля auth
    ...mapGetters('auth', ['isAuthenticated'])
  },
  methods: {
    // Подключаем действия из модуля auth
    ...mapActions('auth', ['login'])
  }
}

Здесь я показываю удобный приём: модульное имя передаётся первым аргументом, а дальше — список геттеров или действий.


Паттерны и лучшие практики при работе с Vuex

Когда стоит использовать Vuex

Vuex хорошо подходит, когда:

  • у вас среднее или большое приложение;
  • одни и те же данные нужны в разных, не связанных напрямую компонентах;
  • важна прозрачная отладка и предсказуемость;
  • вы хотите явно отделить бизнес‑логику от компонентов.

Не всегда нужно начинать с Vuex в самом начале. Но как только вы замечаете:

  • что много данных приходится "проталкивать" через цепочку компонентов;
  • что появляются "глобальные" события;
  • что становится трудно понять, кто и когда изменяет данные,

— имеет смысл вынести общее состояние в Vuex.

Организация файловой структуры

Хорошей практикой является разделение по доменам:

  • store/modules/auth.js
  • store/modules/todos.js
  • store/modules/profile.js
  • и так далее.

В каждом модуле удобно группировать:

  • state вверху;
  • затем getters;
  • затем mutations;
  • затем actions.

Это помогает быстро ориентироваться в коде.

Где держать бизнес‑логику

Основной принцип: бизнес‑логика должна быть в actions, а не в компонентах.

Компонент:

  • отвечает за отображение;
  • вызывает actions и отображает результат.

Actions:

  • описывают, что нужно сделать с данными;
  • выполняют запросы к API;
  • вызывают нужные мутации.

Такой подход делает компоненты более простыми, а логику — переиспользуемой.

Избегайте избыточного использования Vuex

Не нужно класть в Vuex всё подряд. Держите там только то, что:

  • важно для нескольких частей приложения;
  • должно переживать переходы между страницами (пока страницы в рамках одного SPA);
  • нужно сохранять в истории (например, для "time travel" через Devtools).

Локальное состояние конкретного компонента (состояние модального окна, значение одного локального инпута и так далее) вполне можно хранить в самом компоненте.


Типичные ошибки при работе с Vuex

1. Изменение state напрямую

Проблема: изменение state не через мутации.

// Плохо - меняем state напрямую из компонента
this.$store.state.count++

Это ломает концепцию Vuex и делает отладку сложнее. Делать нужно только так:

// Хорошо - изменение происходит через мутацию
this.$store.commit('increment')

2. Асинхронный код внутри мутаций

Мутации должны быть синхронными. Вставка асинхронного кода приводит к непредсказуемому порядку изменений.

// Плохо
mutations: {
  async incrementLater(state) {
    // Асинхронный код внутри мутации - плохая идея
    await new Promise(resolve => setTimeout(resolve, 1000))
    state.count++
  }
}

Нужно выносить асинхронность в actions:

actions: {
  async incrementLater({ commit }) {
    // Ждём одну секунду
    await new Promise(resolve => setTimeout(resolve, 1000))
    // Теперь вызываем синхронную мутацию
    commit('increment')
  }
}

3. Смешивание логики во всех слоях

Иногда в приложениях можно встретить:

  • часть логики в компонентах;
  • часть — в actions;
  • часть — в мутациях.

Старайтесь придерживаться разделения:

  • мутации — только изменение state;
  • actions — бизнес‑логика и асинхронность;
  • компоненты — только связка "показать данные" и "отреагировать на пользовательский ввод".

Заключение

Vuex вводит жёсткие, но понятные правила обращения с состоянием:

  • одно централизованное хранилище;
  • только мутации могут изменять state;
  • actions управляют асинхронным кодом и бизнес‑логикой;
  • getters предоставляют "представления" данных;
  • модули помогают структурировать большой стор.

Такой подход особенно полезен, когда приложение растёт, команда увеличивается, а отладка и предсказуемость становятся критически важными. С помощью Vuex вы можете держать состояние под контролем, а компоненты — сделать более простыми и понятными.


Частозадаваемые технические вопросы по Vuex

Как типизировать Vuex стор в TypeScript

Создайте интерфейсы для state и используйте их при создании стора.

// Описываем тип состояния
interface RootState {
  count: number
}

// Передаём тип в createStore
export const store = createStore<RootState>({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

В компонентах с Composition API используйте дженерик:

import { useStore } from 'vuex'

const store = useStore<RootState>()

Так вы получите типизированный доступ к state и геттерам.

Как сделать переиспользуемый модуль Vuex с динамическими именами

Используйте функцию‑фабрику и динамическую регистрацию модулей:

// Фабрика модуля
function createListModule() {
  return {
    namespaced: true,
    state: () => ({ items: [] }),
    mutations: {
      setItems(state, items) {
        state.items = items
      }
    }
  }
}

// Динамическая регистрация
store.registerModule('products', createListModule())
store.registerModule('users', createListModule())

Теперь у вас два независимых модуля с одинаковой логикой.

Как сбросить состояние стора к начальному

Храните начальное состояние в функции и используйте мутацию для полного сброса.

const getDefaultState = () => ({
  count: 0,
  todos: []
})

const state = getDefaultState()

const mutations = {
  resetState(state) {
    Object.assign(state, getDefaultState())
  }
}

Вызовите commit('resetState'), чтобы вернуть state в исходное состояние.

Как использовать Vuex в модульных тестах

Создавайте "тестовый" стор с нужной частью логики и подключайте его к компоненту.

import { createStore } from 'vuex'
import { shallowMount } from '@vue/test-utils'
import MyComponent from '@/components/MyComponent.vue'

const store = createStore({
  state: { count: 0 },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

const wrapper = shallowMount(MyComponent, {
  global: {
    plugins: [store] // Подключаем стор для теста
  }
})

Так вы изолируете тест и сможете проверять взаимодейcтвие компонента со стором.

Как разделять Vuex код между несколькими проектами

Вынесите общие модули Vuex в отдельный npm‑пакет:

  1. Создайте отдельный репозиторий с модулями.
  2. Экспортируйте модули как функции‑фабрики (чтобы не было конфликтов state).
  3. Публикуйте пакет в приватный или публичный npm.
  4. Подключайте модули в проектах через import и modules.

Это помогает переиспользовать общую бизнес‑логику в нескольких приложениях.

Стрелочка влевоРеактивные ссылки ref - полный разбор для разработчиковРеактивные объекты reactive-objects - подробное руководство с примерамиСтрелочка вправо

Постройте личный план изучения Vue до уровня Middle — бесплатно!

Vue — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Vue

Руководство по валидации форм во Vue.jsИнтеграция Tiptap для создания редакторов на VueРабота с таблицами во Vue через TanStackИнструкция по установке и компонентам Vue sliderУправление пакетами Vue js с помощью npmУправление пакетами и node modules в Vue проектахКак использовать meta для улучшения SEO на VueПолный гайд по компоненту messages во Vuejs5 правил использования Inertia с Vue и LaravelРабота с модулями и пакетами в VueИнструкция по работе с grid на VueGithub для Vue проектов - подробная инструкция по хранению и совместной работеНастройка ESLint для Vue проектов и поддержка качества кодаОбработка ошибок и отладка в Vue.jsИспользование Vue Devtools для отладки и мониторинга приложенийРабота с конфигурационными файлами и скриптами VueСоздание и настройка проектов Vue с помощью Vue CLI3 способа интеграции Chart.js с Vue для создания графиковРабота с Canvas во VueИнструкция по реализации календаря во VueРабота с Ant Design Vue для создания UI на Vue
Реактивные ссылки ref - полный разбор для разработчиковVuex - полное руководство по управлению состоянием во Vue приложенияхРеактивные объекты reactive-objects - подробное руководство с примерамиРеактивные переменные - концепция reactive и практические примерыМеханизм Provide Inject - как он работает и когда применятьPinia современный менеджер состояния для VueЛокальное состояние local state в веб разработкеГлобальное состояние в приложениях - global state
Обзор и использование утилит Vue для удобной разработкиРабота с обновлениями компонента и жизненным циклом updateРазрешение конфликтов и ошибок с помощью Vue resolveИспользование query-параметров и их обработка в маршрутах VueЗагрузка и управление состоянием загрузки в VueИспользование библиотек Vue для расширения функционалаРабота с JSON данными в приложениях VueКак работать с экземплярами компонента Instance во VueПолучение данных и API-запросы во Vue.jsЭкспорт и импорт данных и компонентов в VueОбработка событий и их передача между компонентами VuejsПонимание core функционала Vue и его применениеГайд по defineEmits на Vue 3Понимание и применение Composition API в Vue 3Понимание и работа с компилятором VueКогда и как использовать $emit и call во VueВзаимодействие с внешними API через Axios в Vue
Веб приложения на Vue архитектура и лучшие практикиИспользование Vite для быстрого старта и сборки проектов на Vue 3Работа с URL и ссылками в приложениях на VueРабота с пользовательскими интерфейсами и UI библиотеками во VueОрганизация и структура исходных файлов в проектах VueИспользование Quasar Framework для разработки на Vue с готовыми UI-компонентамиИнтеграция Vue с PHP для создания динамичных веб-приложенийОбзор популярных шаблонов и стартовых проектов на VueКак организовать страницы и маршруты в проекте на VueNuxt JS и Vue 3 для SSR приложенийСоздание серверных приложений на Vue с помощью Nuxt jsИспользование Vue Native для разработки мобильных приложенийОрганизация и управление индексной страницей в проектах VueИспользование Docker для контейнеризации приложений на VueИнтеграция Vue.js с Django для создания полноценных веб-приложенийСоздание и работа с дистрибутивом build dist Vue приложенийРабота со стилями и CSS в Vue js для красивых интерфейсовСоздание и структурирование Vue.js приложенияКак исправить ошибку cannot find module vueНастройка и сборка проектов Vue с использованием современных инструментовИнтеграция Vue с Bitrix для корпоративных решенийРазработка административных панелей на Vue js
Функция append в Go GolangОтображение компонента mounted - практическое руководствоХуки жизненного цикла компонентов - полное руководство для разработчиковУничтожение компонента destroyed - как правильно очищать ресурсы и подпискиИнициализация данных в состоянии created - как и когда подготавливать данные в приложенииОбновление компонента beforeUpdate во VueМонтирование компонента - хук beforeMount в VueРазрушение компонента во Vue - beforeDestroy и beforeUnmountСоздание экземпляра beforeCreate - полный разбор жизненного цикла
5 библиотек для создания tree view во VueИнтеграция Tailwind CSS с Vue для современных интерфейсовИнтеграция Vue с серверной частью и HTTPS настройкамиКак обрабатывать async операции с Promise во VueИнтеграция Node.js и Vue.js для разработки приложенийРуководство по интеграции Vue js в NET проектыПримеры использования JSX во VueГайд по импорту и регистрации компонентов на VueМногоязычные приложения на Vue с i18nИнтеграция FLIR данных с Vue5 примеров использования filter во Vue для упрощения разработки3 примера реализации drag-and-drop во Vue
Слоты компонента - концепция и практическое использованиеРегистрация компонентов component-registration в приложениях с внедрением зависимостейProps компонента в React - полный разбор с примерамиФункциональные компоненты в React - функциональный подход к построению интерфейсовСобытия компонента - events в современных интерфейсахДинамические компоненты - dynamic-componentsСоздание компонента component - практическое руководствоАсинхронные компоненты async-components - практическое руководство
Наблюдатели watchers - от паттерна до практических реализацийУправление переменными и реактивными свойствами во VueИспользование v for и slot в VueПрименение v-bind для динамической привязки атрибутов в VueУправление пользователями и их данными в Vue приложенияхСоздание и использование UI Kit для Vue приложенийТипизация и использование TypeScript в VuejsШаблоны Vue templates - практическое руководство для разработчиковИспользование шаблонов в Vue js для построения интерфейсовИспользование Swiper для создания слайдеров в VueРабота со стилями и стилизацией в VueСтруктура и особенности Single File Components SFC в VueРабота со SCSS в проектах на Vue для стилизацииРабота со скроллингом и прокруткой в Vue приложенияхПрименение script setup синтаксиса в Vue 3 для упрощения компонентовИспользование scoped стилей для изоляции CSS в компонентах Vue3 способа улучшить навигацию Vue с push()Обработка запросов и асинхронных операций в VueРеактивность Vue reactivity - как это работает под капотом и как этим пользоватьсяПонимание и использование provide inject для передачи данных между компонентамиПередача и использование props в Vue 3 для взаимодействия компонентовПередача данных между компонентами с помощью props в Vue jsУправление property и функциями во Vue.jsРабота со свойствами компонентов VueУправление параметрами и динамическими данными во VueОпции компонента в Go - паттерн component-optionsРабота с lifecycle-хуком onMounted во VueОсновы работы с объектами в VueПонимание жизненного цикла компонента Vue js на примере mountedИспользование модальных окон modal в Vue приложенияхИспользование методов в компонентах Vue для обработки логикиИспользование метода map в Vue для обработки массивовИспользование хуков жизненного цикла Vue для управления состоянием компонентаРабота с ключами key в списках и компонентах VueОбработка пользовательского ввода в Vue.jsРабота с изображениями и их оптимизация в VueИспользование хуков жизненного цикла в VueОрганизация сеток и гридов для верстки интерфейсов на VueСоздание и управление формами в VueКомпоненты Vue создание передача данных события и emitОрганизация файлов и структура проекта Vue.jsРабота с динамическими компонентами и данными в Vue3 способа манипулирования DOM на VueРуководство по div во VueИспользование директив в Vue и их расширенные возможностиОсновы и применение директив в VueИспользование директив и их особенности на Vue с помощью defineИспользование компонентов datepicker в Vue для выбора датОрганизация циклов и итераций во VueКак работает компиляция Vue CoreВычисляемые свойства computed во Vue.jsСоздание и использование компонентов в Vue JSОбработка кликов и пользовательских событий в VueИспользование классов в Vue для организации кода и компонентовИспользование директивы checked для управления состоянием чекбоксов в VueГайд на checkbox компонент во VueОтображение данных в виде графиков с помощью Vue ChartСоздание и настройка кнопок в VueСоздание и настройка кнопок в Vue приложенияхРабота с lifecycle-хуками beforeCreate и beforeMount во VueОсновы Vue - vue-basics для уверенного стартаИспользование массивов и методов их обработки в VueИспользование массивов и их обработка в Vue
Использование Vuetify для создания современных интерфейсов на VueИспользование transition во VueТестирование компонентов и приложений на VueТелепортация - архитектура и реализация в серверных приложенияхРабота с teleport для управления DOM во VueSuspense в React - управление асинхронными данными и ленивой загрузкойПять шагов по настройке SSR в VuejsИспользование Shadcn UI компонентов с Vue для продвинутых интерфейсовИспользование router-link для навигации в Vue RouterКак использовать require в Vue для динамического импорта модулейРабота с динамическим рендерингом и виртуальным DOM на Vue.jsИспользование ref для управления ссылками и реактивностью в Vue 3Использование Vue Pro и его преимущества для профессиональной разработкиПлагины Vue vue-plugins - полное практическое руководствоРуководство по nextTick для работы с DOMМиксины - mixins в современном программированииJSX в Vue с использованием плагина vue-jsxСоздание и использование компонентов с помощью Vue js и CУправление состоянием и реактивностью через inject и provideДинамическое обновление компонентов и данных на VueГлубокое изучение документации Vue и как эффективно её использоватьКастомные элементы - Custom Elements в современном JavaScriptИспользование Crystal с Vue для разработкиИспользование вычисляемых свойств для динамического отображения данных на Vue jsОптимизация производительности и предупреждения в Vue
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Vue 3 и Pinia

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий