Перейти к основному содержимому

Стратегии персистентности Pinia

Персистентность должна быть осознанной: не все состояние должно переживать обновление страницы.


1. Фокус на интервью

  1. Варианты персистентности в Pinia
  2. Решения по хранению на уровне полей
  3. Границы безопасности

2. Варианты персистентности

Вариант A: pinia-plugin-persistedstate

export const usePrefsStore = defineStore('prefs', {
state: () => ({ theme: 'light', locale: 'en' }),
persist: true,
});

Также можно настраивать custom storage и выбранные paths.

Вариант B: storage-composable'ы VueUse

const theme = useLocalStorage<'light' | 'dark'>('theme', 'light');
const dismissedTips = useSessionStorage<boolean>('dismissedTips', false);

Подходит, когда персистентность нужна только для конкретных полей.

Вариант C: ручная персистентность

Возможно, но легко ошибиться и сложнее поддерживать.

3. Что сохранять, а что нет

Сохранять:

  • theme / locale
  • UI-предпочтения
  • нечувствительные фильтры

Не сохранять:

  • сырые access token в небезопасных контекстах
  • чувствительные поля профиля без явной политики
  • краткоживущее транзиентное состояние загрузки

4. Рекомендации для продакшена

  • Определите матрицу персистентности для каждого store
  • Используйте sessionStorage для короткоживущих сессионных данных
  • Используйте явные version key для миграций
  • Добавляйте безопасный fallback при изменении схемы хранимых данных

5. Краткое резюме для интервью

Я выбираю персистентность с учетом чувствительности данных и их времени жизни. Использую plugin или VueUse для предсказуемого хранения, не сохраняю чувствительные значения бездумно и поддерживаю безопасные для миграции ключи.