Порефакторим...

ОБНОВЛЕНИЕ 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

Именно поэтому, мы и получили следующее выражение:

Посмотрим, что вышло в итоге:

порефакторим screenshot Либо:

no news рефакторим

Исходный код на данный момент.

Last updated

Was this helpful?