9

Рендер страницы через JavaScript

Задача

Есть API, который в ответ на запрос отдает json со списком фреймворков и их описанием. Необходимо на его основе отрендерить карточки.

Прототип

Алгоритм

- Получить список;

- Обработать список;

- Отрендерить в HTML.


1. Получить список

Для данной статьи я подготовил тестовые данные, которые можно получить по адресу:

https://private-531a0-vadimfilimonovblog.apiary-mock.com/fra...

Чтобы сделать HTTP запрос — используйте метод fetch:

fetch("https://private-531a0-vadimfilimonovblog.apiary-mock.com/fra...")

2. Обработать список

Вот как выглядит json, который мы получаем:

{
  "success": true,
  "list": [
    {
      "title": "React",
      "text": "React is an open-source...

Напишем функцию buildHTML, которая на вход будет принимать JSON, а отдавать строку, которую мы в будущем используем как HTML:

// HTTP запрос
fetch("https://private-531a0-vadimfilimonovblog.apiary-mock.com/fra...")
  // переводим ответ в json
  .then(response => response.json())
  // конвертируем в html
  .then(buildHTML)

Определение функции:

const buildHTML = ({ list }) =>
  list.map(({ title, text }) => (`
    <div>
      <h2>${title}</h2>
      <p>${text}</p>
    </div>
`)).join("");

3. Отрендерить в HTML


fetch("https://private-531a0-vadimfilimonovblog.apiary-mock.com/fra...")
  .then(response => response.json())
  .then(buildHTML)
  .then(render); // полученный результат передает в функцию render

В файле HTML создадим пустой контейнер, куда будем вставлять карточки:

<div class="container"></div>

https://developer.mozilla.org/en-US/docs/Web/API/Element/inn... функции render сводится лишь к использованию свойства innerHTML:

const render = (html) => {
  const container = document.querySelector('.container');
  container.innerHTML = html;
};

Результат

Полную версию кода смотрите на codepen.

Другие посты об образовательной платформе ищите по тэгу GeekBrains. Всю необходимую информацию и отзывы ищите в нашем специальном разделе. Там вы найдёте все актуальные курсы GeekBrains.

Web-технологии

534 поста5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Зачем нужна переменная container?

раскрыть ветку (6)
0
DELETED
Автор поста оценил этот комментарий

Для того чтобы воспользоваться ей и через метод innerHTML перезаписать html.

Или вопрос - почему не сразу в одну строку?

раскрыть ветку (5)
0
Автор поста оценил этот комментарий

Если каждый раз селектор ганять, то почему не в одну строку, если нет, то почему селектор за функцию не вынесен?

раскрыть ветку (4)
0
DELETED
Автор поста оценил этот комментарий

Можно вынести за пределы функции. Пример учебный, вопрос производительности не стоял.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Что за отношение к учебным примерам как к говну то? Можно подумать, что раз пример учебный, то можно писать на отъебись.

0
DELETED
Автор поста оценил этот комментарий

В одну строку будет плохо с точки зрения качества кода.
Здесь можно почитать об этом подробнее:
https://ru.hexlet.io/blog/posts/sovershennyy-kod-razdelenie-...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Причём работа с DOM — недешёвая операция.

Дальше читать не стал. Можно так подумать, что с DOM есть только одна операция и она дорогая.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку