Middleware Persist позволяет сохранить состояние в Zustand, чтобы избежать потери данных при перезагрузке страницы. Это особенно полезно для сохранения токенов аутентификации, пользовательского ввода, пагинации, фильтров и т.д.
Основные шаги:
1. Введение в проблему:
- Проблема: При перезагрузке страницы данные, хранящиеся в Zustand, теряются.
- Примеры: Потеря пользовательской сессии, введенных данных, настроек фильтров.
2. Решение с Middleware Persist:
- Middleware Persist: Zustand предоставляет инструмент Middleware Persist для автоматического сохранения состояния при перезагрузке страницы.
3. Применение на практике:
- Пример приложения с счетчиком:
- Комментарии: Закомментирован код, не относящийся к счетчику.
- Разметка: Добавлен счетчик в разметку.
4. Настройка Middleware:
- Типизация: В
CounterStore
типизирована работа с Middleware. - Добавление Middleware Persist:
- Обертывание: Вызов
CounterSlice
обернут в Middleware Persist. - Параметры: Указано название стора.
- Обертывание: Вызов
5. Результат:
- Сохранение состояния: После изменений в браузере и перезагрузки страницы состояние счетчика сохраняется, благодаря автоматическому сохранению в
LocalStorage
.
6. Настройка сохраняемых данных:
- Partialize: Добавлен второй счетчик для демонстрации возможности сохранения только определенных данных.
- Указание данных: Используя параметр
Partialize
вPersist
, можно указать, какие данные сохранять.
7. Использование разных хранилищ:
- Различные хранилища: Можно использовать различные хранилища, не ограничиваясь
LocalStorage
. - Кастомное хранилище: Показано создание кастомного хранилища.
Пример:
import create from 'zustand';
import { persist } from 'zustand/middleware';
const useCounterStore = create(persist(
(set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}),
{
name: 'counter-storage', // Уникальное имя для хранилища
}
));
// Компонент React
const CounterComponent = () => {
const { count, increment, decrement } = useCounterStore();
return (
<div>
<h1>{count}</h1>
<button onClick={increment}>+</button>
<button onClick={decrement}>-</button>
</div>
);
};
Основные моменты:
- Middleware Persist автоматически сохраняет состояние в
LocalStorage
или другом хранилище. - Partialize позволяет выборочно сохранять данные.
- Кастомные хранилища могут быть использованы для более сложных сценариев.
Middleware Persist предоставляет удобный способ сохранения состояния при перезагрузке страницы, что особенно полезно для данных, которые должны быть доступны между сессиями.