Поиск и фильтрация данных — обычная функция для веб-сайтов и приложений, особенно для электронной коммерции. В этой статье мы обсудим, как создать функцию поиска и фильтрации продуктов с помощью React. Данные о продукте будут запрошены из безголовый CMS (Космический) с мгновенным обновлением пользовательского интерфейса. Мы также поговорим о том, как осуществляется управление состоянием с помощью хуков и оптимизации использования API с помощью техники устранения дребезга.
Установить демо-контент шаблона
Чтобы начать работу с этим примером, установите Торговая площадка UNFT шаблон, который включает демо-контент, который мы будем использовать для функций поиска и фильтрации. Или вы можете пропустить этот шаг и просто следовать коду.
- Войти в свой Космический счет.
- Перейдите в Торговая площадка UNFT и нажмите «Выбрать шаблон».
- Следуйте инструкциям, чтобы создать новый проект и корзину и импортировать демо-контент.
- Посмотрите демо-контент, установленный в вашем Bucket.
- Перейдите в «Продукты» и обратите внимание на метаполя, которые содержат данные, которые мы будем использовать для нашей функции поиска/фильтрации React.
Создайте приложение React для поиска/фильтрации
Чтобы упростить задачу, мы уже создали небольшое приложение с функцией поиска/фильтрации, доступной на StackBlitz.
Используя Cosmic API, мы можем фильтровать результаты продукта по критериям поиска. Теперь давайте посмотрим, как это работает.
Создайте поисковый/фильтрующий запрос
Чтобы отфильтровать продукты в нашей функции, нам нужно будет отправить запрос в Cosmic API, чтобы получить только продукты, соответствующие критериям поиска. Для этого мы будем использовать Космические запросы.
Для создания запроса мы создаем объект query
со свойствами, которые совпадают со значениями метаданных объекта, которые мы ищем, например color
, price
качества categories
.
Вот пример с комментариями, чтобы объяснить, что делает каждое свойство запроса.
const query = { "type":"products" "metadata.price":{ "$gte":10, "$lte":100 }, "metadata.color":"Blue", "metadata.categories":"627e23f18bb13a000911ea55",
}
После того, как мы создадим наш запрос, мы отправляем запрос в Космический модуль NPM используя getObjects
метод. Мы используем props
чтобы ограничить ответ только теми свойствами, которые нам нужны. Вот пример того, как выглядит реализация.
import Cosmic from 'cosmicjs'; const bucket = Cosmic().bucket({ slug: "YOUR_COSMIC_BUCKET_SLUG", read_key: "YOUR_COSMIC_BUCKET_READ_KEY",
}); const params = { query, props: 'title,slug,metadata,created_at'
}
const data = await bucket.getObjects(params);
Теперь давайте подробно рассмотрим, как React обрабатывает обновления состояния пользовательского интерфейса с помощью хуков.
Реагировать на хуки
React использует односторонний поток данных, передавая данные вниз по иерархии компонентов от родительских к дочерним компонентам, а хуки позволяют функциональным компонентам иметь доступ к состоянию. Для каждого обновления поиска и фильтра в полях ввода мы добавляем состояние в приложение React, используя хук состояния. useState
.
const [search, setSearch] = useState('');
const [{ min, max }, setRangeValues] = useState({ min: '', max: '' });
Чтобы отобразить отфильтрованные данные на веб-странице, мы сопоставляем filterResult
массив и отображать соответствующий список продуктов.
// App.js
<div className={styles.list}> {filterResult?.length ? ( filterResult?.map(product => ( <Card className={styles.card} item={product} key={product.slug} /> )) ) : ( <p className={styles.inform}>Try another category!</p> )}
</div>
Использование пользовательского хука ReactDebounce
Когда пользователь вводит что-то в поле ввода, состояние search
переменная будет обновлена. Чтобы улучшить поиск и фильтрацию, мы создадим Реагировать на пользовательский хук useDebounce
.
Этот хук включает откат, который очищает любое быстро меняющееся значение. Значение debounced будет отражать только самое последнее значение, когда useDebounce
ловушка не вызывалась в течение указанного периода времени. При использовании вместе с useEffect
, вы можете гарантировать, что дорогостоящие операции, такие как вызовы API, не будут выполняться слишком часто.
import { useState, useEffect } from 'react'; function useDebounce(value, delay) { const [debouncedValue, setDebouncedValue] = useState(value); useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(handler); }; }, [value, delay]); return debouncedValue;
} export default useDebounce;
В приведенном ниже примере вы можете искать Cosmic API и использовать useDebounce
чтобы предотвратить запуск вызовов API при каждом нажатии клавиши. Цель состоит в том, чтобы вызов API срабатывал только тогда, когда пользователь перестает печатать, чтобы мы не сталкивались с космическим API слишком быстро.
const [search, setSearch] = useState(''); const debouncedSearchTerm = useDebounce(search, 500); useEffect(() => { let isMount = true; if (isMount && debouncedSearchTerm?.length) { handleFilterDataByParams({ search: debouncedSearchTerm, }); } return () => { isMount = false; }; }, [debouncedSearchTerm]);
Заключение
Поиск и фильтрация являются общей функцией многих веб-сайтов и приложений, создание которых может оказаться сложным. Но с помощью правильных инструментов и методов создание этой функции может быть проще и приятнее для конечного пользователя.
В этой статье мы показали вам, как вы можете использовать Cosmic Queries, React Hooks и debounce, чтобы создать отличный поиск и фильтрацию. Все примеры, описанные в этой статье, являются частью Шаблон приложения uNFT Marketplace. Вы можете просмотреть полную демонстрацию здесь, Установите шаблон приложения на панели инструментов Cosmic или клонируйте Репозиторий GitHub. Чтобы узнать больше о Cosmic Queries, перейдите на Космическая документация.
Если у вас есть какие-либо вопросы об интеграции и функциях Cosmic, вы можете связаться с ними по адресу Twitter, Вялый или следовать YouTube канал.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. Доступ здесь.
- Источник: https://www.codementor.io/nairage/how-and-why-i-built-search-and-filter-data-using-react-hooks-and-a-headless-cms-1vx1voq1v4
- a
- О нас
- доступ
- Все
- позволяет
- уже
- и
- Другой
- API
- приложение
- Применение
- соответствующий
- Программы
- массив
- гайд
- доступен
- не являетесь
- ниже
- Синии
- строить
- Строительство
- построенный
- призывают
- под названием
- Объявления
- карта
- категории
- сложные
- изменения
- ребенок
- КМВ
- код
- цвет
- Комментарии
- Общий
- компонент
- компоненты
- заключение
- содержание
- Создайте
- Критерии
- изготовленный на заказ
- приборная панель
- данным
- задерживать
- подробнее
- обсуждать
- Дисплей
- вниз
- электронная коммерция
- каждый
- легче
- позволяет
- приятный
- обеспечивать
- особенно
- Эфир (ETH)
- пример
- Примеры
- дорогим
- опыт
- Объяснять
- объяснены
- БЫСТРО
- Особенность
- Особенности
- поле
- Поля
- фильтр
- фильтрация
- Для пожарных
- поток
- следовать
- часто
- от
- полный
- функция
- функциональность
- получить
- GIF
- Go
- цель
- большой
- Ручки
- здесь
- иерархия
- ударять
- Крючки
- Как
- How To
- HTTPS
- реализация
- Импортировать
- улучшать
- in
- включает в себя
- вход
- устанавливать
- интеграции.
- IT
- последний
- УЧИТЬСЯ
- Длина
- ОГРАНИЧЕНИЯ
- Список
- ВЗГЛЯДЫ
- сделанный
- сделать
- управление
- многих
- карта
- рынка
- Совпадение
- Макс
- Метаданные
- метод
- БОЛЕЕ
- Необходимость
- Новые
- объект
- Операционный отдел
- оптимизация
- часть
- Прохождение
- период
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- предотвращать
- цена
- Продукт
- Продукция
- Проект
- свойства
- собственность
- Доказывать
- Вопросы
- быстро
- достигать
- реагировать
- реагировать крючки
- отражать
- запросить
- ответ
- Итоги
- Поиск
- поиск
- небольшой
- So
- удалось
- указанный
- и политические лидеры
- Область
- Шаг
- Шаги
- Останавливает
- Говорить
- снижения вреда
- шаблон
- Ассоциация
- Государство
- вещи
- время
- Название
- в
- слишком
- инструменты
- Типы
- ui
- Обновление ПО
- обновление
- Updates
- Применение
- использование
- Информация о пользователе
- ценностное
- Наши ценности
- Вид
- веб-сайты
- Что
- который
- будете
- работает
- ВАШЕ
- YouTube
- зефирнет