Информация о файлах cookie на этой странице

Наш сайт использует файлы cookie, чтобы обеспечивать его работу, а также собирать и анализировать данные о работе и использовании сайта. Политика конфиденциальности

  • Курсы
    • Discord
    • Twitter
    • Linkedin
    • Facebook
    • Instagram
  • Тарифы
  • English
  • Čeština
  • Deutsch
  • Русский
ВойтиНачать бесплатно
  • Курсы
  • Тарифы

Сообщество

Войти
  
  • Курсы
    • Discord
    • Twitter
    • Linkedin
    • Facebook
    • Instagram
  • Тарифы
  • English
  • Čeština
  • Deutsch
  • Русский
ВойтиНачать бесплатно
  • Курсы
  • Тарифы

Сообщество

Войти

Загрузка расписания

Теперь страница расписания. Расписание приходит из showtimes.json, как в проекте с расписанием, только теперь его загружает эффект, как в уроке «Эффекты». Расписание — это состояние, сначала пустой массив, а эффект с зависимостями [] загружает файл, когда Showtimes появляется на странице:

const [showtimes, setShowtimes] = useState([]);

useEffect(() => {
    async function loadShowtimes() {
        const response = await fetch("showtimes.json");
        setShowtimes(await response.json());
    }
    loadShowtimes();
}, []);

В таблице map() делает строку для каждого сеанса, с его id в качестве ключа: четыре ячейки с днём, временем, фильмом и залом и пятая — с кнопкой «Выбрать места». В проекте «Кинотеатр на Tailwind» скрипт давал этой кнопке классы через button.className = "…". В JSX вы пишете их прямо на кнопке, как на любом другом элементе.

Каждый раз, когда вы открываете расписание, Showtimes снова появляется на странице, поэтому его эффект запускается заново и снова загружает файл. Когда вы уходите на главную, React убирает компонент со страницы, а вместе с ним и его состояние. Здесь это нормально: файл маленький, а расписание за это время могло измениться.

Пока файл в пути, на странице написано Загрузка…, а если сервер отвечает ошибкой, об этом тоже сказано, как на старой странице. Это ещё два состояния, loading и error, как в уроке «Эффекты». Проверяйте response.ok, прежде чем читать данные.

Задание

  1. 1

    В Showtimes.jsx добавьте состояние showtimes и эффект из примера выше (импортируйте useEffect и useState). В tbody покажите строку для каждого сеанса, с ключом: ячейки с showtime.day, showtime.time, showtime.film и showtime.hall и ячейку с кнопкой Выбрать места, у которой те же классы, что давал ей скрипт: className="cursor-pointer rounded-full bg-night px-4 py-1 text-sm font-semibold text-white transition-colors hover:bg-night/80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gold".

  2. 2

    Добавьте состояние loading, сначала true, и поставьте его в false, когда расписание получено. Если response.ok равно false, запишите Не удалось загрузить расписание. в состояние error (сначала ""), тоже поставьте loading в false и завершите функцию через return. Под абзацем показывайте <p className="mt-4">Загрузка…</p>, пока loading равно true, а ошибку, если она есть, — в <p className="mt-4 text-red-700">. Проверьте: допустите опечатку в имени файла в fetch(), а потом исправьте её.

Назад

4/9

  1. 1. Кинотеатр как приложение на React
  2. 2. Две страницы в одном приложении
  3. 3. Фильмы из данных
  4. 4. Загрузка расписания
  5. 5. Выбор дня
  6. 6. Выбор мест
  7. 7. Форма бронирования
  8. 8. Запоминаем билеты
  9. 9. Поздравляем!
Далее

Начните программировать бесплатно

Регистрируясь, вы принимаете Условия использования и Политику конфиденциальности.

Или зарегистрируйтесь через: