Вопрос проверяет понимание подходов к хранению состояния фильтров на фронтенде и их интеграции с API-запросами.
Фильтры — это ключевой элемент пользовательского интерфейса, позволяющий сузить выборку данных. Правильное хранение их состояния критически важно для удобства пользователя и корректной работы приложения. Основной вопрос — где хранить состояние: в URL или в глобальном состоянии (например, Redux или React Context).
Когда фильтры влияют на содержимое страницы и должны быть воспроизводимы (например, при отправке ссылки другому человеку), их следует хранить в query-параметрах URL. Это даёт несколько преимуществ: пользователь может поделиться ссылкой с применёнными фильтрами, кнопка «назад» работает естественно, и состояние легко синхронизировать с сервером при загрузке страницы. Пример: https://example.com/products?category=electronics&price=100-500.
Если фильтры носят временный характер и не должны влиять на URL (например, фильтр в модальном окне или настройки, которые не нужно шарить), лучше использовать локальное состояние компонента или глобальный стейт. Это упрощает код и избегает загромождения URL лишними параметрами.
При отправке запроса к API фильтры обычно преобразуются в query-параметры. Например, в React с использованием fetch:
const fetchProducts = async (filters) => {
const params = new URLSearchParams(filters).toString();
const response = await fetch(`/api/products?${params}`);
return response.json();
};
// Использование
const filters = { category: 'electronics', price: '100-500' };
fetchProducts(filters);Если состояние хранится в URL, можно напрямую читать параметры из window.location.search и передавать их в запрос. При использовании React Router удобно использовать хук useSearchParams.
react-router-dom или вручную через history.pushState.Выбор места хранения зависит от контекста: если фильтры должны быть воспроизводимы и доступны для шаринга — используйте URL, иначе — состояние приложения. Это обеспечивает лучший пользовательский опыт и упрощает интеграцию с API.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию