Итоги
В этом уроке вы узнали, что:
map()превращает массив данных в массив элементов, а React показывает массив в фигурных скобках элемент за элементом:{bands.map((band) => <li key={band.id}>{band.name}</li>)}. Так же это работает и для компонентов:<BandCard key={band.id} band={band} />.- Каждому элементу списка нужен ключ: уникальный в списке и одинаковый для одного и того же элемента, чтобы React мог различать элементы, когда список меняется. Берите его из данных (
band.id), а не из позиции в массиве. Ключ ставится на элемент, который возвращаетmap(), и компонент не получает его в пропсах. Без ключей консоль предупреждает:Each child in a list should have a unique "key" prop. - Что покажет список, решается перед
return:filter()выбирает часть элементов,sort()ставит их в другом порядке.sort()меняет сам массив, поэтому сортируйте копию:[...bands].sort(…). Компонент не меняет данные, которые получает. ifнельзя поставить в фигурные скобки, но можно передreturn. Ранний возврат сначала разбирает особый случай:if (bands.length === 0) { return <p>Групп пока нет.</p>; }. Компонент, которому нечего показывать, возвращаетnull.- Условный оператор
условие ? a : bдаётa, если условие истинно, иb, если нет. Это выражение, поэтому его можно поставить в JSX: для текста, элемента или атрибута (className={band.day === "Пятница" ? "card friday" : "card saturday"}). условие && элементдаёт элемент или ничего: дляfalse,true,nullиundefinedReact ничего не показывает. Но числа он показывает, а0 && …даёт0, поэтому сравнивайте:likes > 0 && ….
В следующем уроке, «Мини-проект: Книга рецептов», вы соберёте компоненты, пропсы, списки и условия в собственное приложение — книгу рецептов.
Но сначала немного практики: список билетов фестиваля. Билеты лежат в App.jsx, а остальное за вами.
Задание
- 1
Под заголовком покажите билеты в списке
ul: для каждого билета —liс названием и ценой, напримерПятница: €45. Не забудьте про ключи. - 2
Если у билета в
leftноль, он распродан. Вместо цены в его пункте написаноРаспродано(Суббота: Распродано), и у него есть классsold-out, который делает его серым.