Что такое Pinia

Ответ

Pinia — это хранилище состояния (state management) для Vue.js, альтернатива Vuex. Проще, легковеснее и с TypeScript-поддержкой из коробки.

Ключевые особенности:

  • Простота APIdefineStore() создает хранилище.
  • Реактивность — состояние автоматически обновляет компоненты.
  • Гибкость — можно использовать Composition или Options API.
  • DevTools — интеграция с Vue DevTools.

Пример:

// stores/counter.js
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  actions: {
    increment() {
      this.count++;
    },
  },
});

Использование в компоненте:

import { useCounterStore } from '@/stores/counter';

const counter = useCounterStore();
counter.increment(); // Увеличит count

Ответ 18+ 🔞

А, Pinia, говоришь? Ну это, блядь, такая штука, чтобы в твоём Vue-приложении не было бардака, как в моей квартире после пятницы. Вместо того чтобы таскать состояние туда-сюда через пропсы, как дурак с пакетами, ты его в одно место складываешь. Типа общего холодильника для данных, понимаешь?

Раньше все юзали Vuex, конечно. Но там, ёпта, столько церемоний — мутации, экшены, геттеры... Чувствуешь себя не программистом, а архивариусом в ёбаном министерстве. Pinia — это как будто взяли тот Vuex, выкинули оттуда всю бюрократию, оставили только суть и сказали: «На, мужик, работай, не еби мозг».

Чем он, сука, хорош:

  • Пиздец как просто. Одна функция defineStore() — и хранилище готово. Никаких модулей, никакой хуйни.
  • Всё само обновляется. Изменил состояние в хранилище — компоненты, которые на него подписаны, сразу это видят. Магия, блядь, но приятная.
  • Хочешь — пиши как в Composition API, хочешь — как в Options. Похуй, делай как удобно. Pinia не загоняет в рамки, как некоторые.
  • Для DevTools тоже всё готово. Будешь смотреть, что и где поменялось, как заправский детектив.

Смотри, как это выглядит на практике:

Создаём файлик, ну, stores/counter.js. Не благодари.

// stores/counter.js
import { defineStore } from 'pinia';

export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }), // Вот наше состояние, пусть будет счётчик
  actions: {
    increment() { // А это действие, которое его меняет
      this.count++; // Всё, просто ебём прибавляем единичку
    },
  },
});

А теперь в компоненте используем эту красоту:

import { useCounterStore } from '@/stores/counter';

const counter = useCounterStore(); // Достаём наше хранилище
counter.increment(); // И бабахаем по кнопке — count увеличится!

Вот и вся философия, в рот меня чих-пых! Никаких лишних телодвижений. Создал, вызвал, использовал. Красота, да и только. Если Vuex — это поход в ЗАГС со всеми справками, то Pinia — это гражданский брак: всё честно, но без лишней волокиты. Рекомендую, чувак.