Проверяет умение фильтровать коллекции данных по выбранному пользователем критерию и понимание иммутабельного обновления состояния.
Фильтрация списка — это процесс отбора из исходной коллекции только тех элементов, которые удовлетворяют заданному условию. В вебе это типичная задача: пользователь выбирает категорию, статус или диапазон, а интерфейс показывает только подходящие записи. Ключевая идея — не изменять исходные данные, а каждый раз вычислять новое представление на основе текущего фильтра.
Метод Array.prototype.filter принимает функцию-предикат и возвращает новый массив с элементами, для которых предикат вернул true. Исходный массив остаётся неизменным.
const items = [
{ id: 1, name: 'Ноутбук', category: 'tech' },
{ id: 2, name: 'Книга', category: 'books' },
{ id: 3, name: 'Телефон', category: 'tech' }
];
const filtered = items.filter(item => item.category === 'tech');
// [{ id: 1, ... }, { id: 3, ... }]
В React выбранный фильтр хранят в состоянии через useState, а отфильтрованный список вычисляют прямо в теле компонента или через useMemo. Это гарантирует, что при изменении фильтра компонент перерисуется и покажет актуальные данные.
function List({ items }) {
const [filter, setFilter] = useState('all');
const visible = useMemo(() => {
if (filter === 'all') return items;
return items.filter(i => i.category === filter);
}, [items, filter]);
return (
<>
<select onChange={e => setFilter(e.target.value)}>
<option value="all">Все</option>
<option value="tech">Техника</option>
</select>
<ul>{visible.map(i => <li key={i.id}>{i.name}</li>)}</ul>
</>
);
}
filter уже возвращает новый, не используйте splice или push.&& или цепочку filter.useMemo, чтобы не пересчитывать фильтр на каждый рендер.Итог: фильтрацию удобно реализовывать через filter и хранение выбранного критерия в состоянии — это даёт предсказуемый, иммутабельный и легко тестируемый код, который подходит для большинства интерфейсов со списками.
Уровень
Рейтинг:
5
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию