Що таке Pinia?
Pinia - це сучасне, офіційно рекомендоване глобальне сховище стану (state management) для Vue.js. Її створили як заміну Vuex, і починаючи з Vue 3 Pinia вважається стандартом для роботи з глобальним станом.
Простіше кажучи:
Pinia - це спосіб зберігати спільні дані застосунку (користувач, кошик, налаштування) і використовувати їх у будь-якому компоненті.
Навіщо потрібна Pinia?
Коли застосунок росте, стає незручно прокидувати дані через props або тримати їх в одному компоненті. Наприклад:
- авторизація користувача
- кошик товарів
- налаштування теми
- список категорій
- глобальні сповіщення
Ці дані потрібні різним частинам застосунку → отже, їх потрібно зберігати глобально → у Pinia.
Основні переваги Pinia
1) Простота API
Pinia легша за Vuex:
- немає величезних шаблонів коду
- немає обов'язкових mutations
- мінімум церемоній
- логіка пишеться на чистому JavaScript
2) Повна типізація з коробки (TypeScript)
Pinia створена з урахуванням TS, все типізується автоматично.
3) Реактивність як у Composition API
Можна використовувати ref і reactive прямо в store.
4) Підтримка SSR, DevTools і Hot Module Reload
Дуже зручна у великих проєктах.
5) Легкий поділ на модулі
Кожен store - як окремий модуль:
user store
cart store
products store
theme storeПростий приклад: створення сховища
stores/user.js
import { defineStore } from 'pinia'
export const useUserStore = defineStore('user', {
state: () => ({
user: null,
isLoggedIn: false
}),
actions: {
login(user) {
this.user = user
this.isLoggedIn = true
},
logout() {
this.user = null
this.isLoggedIn = false
}
}
})Використання в компоненті
<script setup>
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
console.log(userStore.user)
userStore.login({ name: "Tim" })
</script>Які сутності є в Pinia?
Pinia store складається з:
state
Сховище даних (реактивне):
state: () => ({ count: 0 })getters
Аналог computed:
getters: {
doubleCount(state) {
return state.count * 2
}
}actions
Методи твого стора:
actions: {
increment() {
this.count++
}
}Коли використовувати Pinia?
Коли:
- дані потрібні кільком компонентам
- дані мають жити між сторінками
- потрібно уникати «прокидування props через 5 рівнів»
- потрібно централізовано зберігати користувача, товари, налаштування, фільтри
- тобі потрібно кешувати API-запити
Підсумок (коротко)
Pinia - це просте, сучасне та гнучке глобальне сховище стану для Vue.js.
Вона:
- замінює Vuex,
- працює як Composition API,
- проста, typed-friendly,
- дозволяє легко ділитися станом між компонентами.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.