Стратегии персистентности Pinia
Персистентность должна быть осознанной: не все состояние должно переживать обновление страницы.
1. Фокус на интервью
- Варианты персистентности в Pinia
- Решения по хранению на уровне полей
- Границы безопасности
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 для предсказуемого хранения, не сохраняю чувствительные значения бездумно и поддерживаю безопасные для миграции ключи.