Порефакторим...
ОБНОВЛЕНИЕ 2018: в учебнике хорошая теория, но ему уже два года. Проверяйте версии пакетов. За выходом нового учебника можно следить в telegram канале или twitter
На канале так же проводятся бесплатные вебинары, публикуются переводы и авторские материалы, присоединяйтесь!
Порефакторим...
Для начала, удалите вовсе компонент <Comments /> (и var Comments =... соответственно).
Далее, давайте представим: у наших новостей появляются какие-то дополнительные поля, пользователь начинает взаимодействовать с ними, например "пометить как прочитанное" и так далее. Нам было бы удобно, чтобы каждая новость была представлена компонентом.
Задача: <News /> должен рендерить список компонентов <Article />. Каждый компонент <Article /> должен получать соответствующие данные, например: первый экземпляр получит первый элемент массива, второй - второй и так далее.
То есть, раньше в map мы возвращали JSX-разметку. Но мы так же можем возвращать и компонент.
Попробуйте сами, а потом смотрите решение ниже.
Подсказка #1: if-else нашего компонента <News />
if (data.length > 0) {
newsTemplate = data.map(function(item, index) {
return (
<div key={index}>
<Article data={item} />
</div>
)
})
} else {
newsTemplate = <p>К сожалению новостей нет</p>
}Подсказка #2 (по сути решение задачи): компонент <Article />
Что любопытно, больше не изменилось ни-че-го.
Замените фразу "всем привет, я компонент App..." на обычный <h3> заголовок - "Новости".
Добавьте красоты (CSS) по вкусу, либо возьмите мой вариант:
css/app.css
С новыми стилями, код сценария выглядит так:
js/app.js
Обратите внимание, я добавил несколько классов, один из них я добавил к тэгу strong. Как вы помните, у нас там было условие:
Так как атрибут class (либо в JSX - classname) у элемента принимает строку, то можно представить элемент с несколькими классами:
В таком случае к нашему элементу применится ... класс "class1class2class3", что естественно, так как мы забыли пробелы. Наверное, мы хотели сделать так:
Теперь у нас будет элемент с классами: class1, class2, class3
Именно поэтому, мы и получили следующее выражение:
Посмотрим, что вышло в итоге:
Либо:

Исходный код на данный момент.
Last updated
Was this helpful?