Skip to main content

Local VS Global state

1. Локальний стан (state компонента)

Локальний стан - це дані, які належать конкретному компоненту і використовуються тільки всередині нього.

Характеристики:

  • видно тільки всередині компонента
  • створюється через ref(), reactive() або data()
  • кожен екземпляр компонента має свій стан
  • не повинно використовуватися іншими компонентами
  • живе стільки, скільки живе компонент

Приклад локального state

Counter.vue:

javascript
<script setup> import { ref } from 'vue' const count = ref(0) // локальний стан </script> <template> <button @click="count++"> Count: {{ count }} </button> </template>

Тут count існує тільки в цьому компоненті.


2. Глобальний стан (shared state)

Глобальний стан - це дані, які повинні бути доступні багатьом компонентам або всьому застосунку.

Зазвичай зберігається в:

  • Pinia (Vue 3 - сучасний стандарт)
  • Vuex (спадщина)
  • або через provide/inject (рідко)

Характеристики:

  • доступно з будь-якого компонента
  • зберігає важливі дані застосунку
  • існує, поки працює застосунок
  • зручно для синхронізації різних частин UI

Приклад глобального state (Pinia)

javascript
// stores/user.js import { defineStore } from 'pinia' export const useUserStore = defineStore('user', { state: () => ({ user: null, isLoggedIn: false }), })

Використання в компоненті:

javascript
<script setup> import { useUserStore } from '@/stores/user' const userStore = useUserStore() console.log(userStore.user) // доступно в будь-якому місці </script>

Локальний vs глобальний - основні відмінності

КритерійЛокальний станГлобальний стан
Де зберігаєтьсяВсередині компонентаВ окремому сховищі (Pinia/Vuex)
Область видимостіТільки компонентВесь застосунок
Життєвий циклЖиве, поки живе компонентЖиве, поки працює застосунок
Для чогоUI-логіка, тимчасові даніАвторизація, кошик, налаштування
ДоступПрямо в компонентіЧерез store
Повторне використанняНіТак (будь-який компонент може читати/змінювати)

Як зрозуміти, куди класти state?

Локальний стан - коли:

  • модалка відкрита/закрита
  • активна вкладка
  • значення інпута
  • стан конкретної картки
  • тимчасові прапорці (isLoading, isFocused)

Приклад: кнопка лайка - це локально лічильник лайків на весь профіль - вже глобально.


Глобальний стан - коли:

  • користувач авторизований?
  • дані кошика
  • налаштування теми (light/dark)
  • список товарів, який використовується на різних сторінках
  • токен авторизації
  • обране, налаштування, мова

Глобальний state - це джерела даних, важливі для різних частин застосунку.


Підсумок (коротко)

Локальний стан - дані всередині компонента. Глобальний стан - спільні дані застосунку, доступні багатьом компонентам.

  • Локальне створюємо через ref()/reactive()
  • Глобальне створюємо в Pinia/Vuex
  • Локальне живе з компонентом
  • Глобальне живе весь час

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.