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

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

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

Сообщество

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

Сообщество

Войти

Две страницы в одном приложении

В старом сайте было два HTML-файла, и ссылка загружала другой. В приложении на React страница одна, и React рисует в ней то, что говорит состояние. Значит, и то, какую страницу видит посетитель, — тоже состояние: page в App, равное "home" или "showtimes". App оставляет себе шапку и подвал, а в main показывает одну из двух страниц, с условным оператором из урока «Списки и условия»:

<main className="mx-auto max-w-5xl px-4 md:px-8">
    {page === "home" ? <Home /> : <Showtimes />}
</main>

Каждая страница — компонент в отдельном файле. Showtimes.jsx уже готов: в нём заголовок, абзац и шапка таблицы со старой страницы расписания. Home.jsx пуст: три раздела главной страницы переезжают туда из App.jsx. Компонент возвращает один элемент, а разделов три, поэтому Home возвращает их во фрагменте, <>…</>.

Кнопки, а не ссылки. Кнопки в шапке меняют состояние, как вкладки дней в уроке «Общее состояние»: Header получает сеттер в пропсах, <Header onNavigate={setPage} />, а его кнопки вызывают его, например onClick={() => onNavigate("showtimes")}. Это именно кнопки, потому что они не ведут на другой адрес: они что-то меняют на этой же странице. А логотип ведёт домой, как и на старом сайте.

Большинство настоящих сайтов на React используют для страниц маршрутизатор (router), например React Router, о котором упоминается в конце курса React. С ним у каждой страницы свой адрес, например /showtimes, поэтому работает кнопка браузера «Назад», а ссылку на любую страницу можно отправить другому человеку. Для двух страниц нашего кинотеатра хватит одного состояния. Но разницу вы заметите: когда посетитель перезагружает страницу, он снова оказывается на главной, потому что состояние начинается с "home".

Задание

  1. 1

    Перенесите три раздела из main в App.jsx в Home.jsx: напишите компонент Home, который возвращает их во фрагменте, и экспортируйте его. В App.jsx импортируйте его и поставьте <Home /> в main. Страница выглядит как раньше.

  2. 2

    В App добавьте состояние page, сначала "home", и показывайте <Home /> или <Showtimes />, как в примере выше (импортируйте useState и Showtimes). Передайте Header проп onNavigate={setPage}, а в Header.jsx пусть логотип и «Главная» вызывают onNavigate("home"), а «Расписание» — onNavigate("showtimes"). Пощёлкайте по страницам в предпросмотре.

  3. 3

    Кнопка «Смотреть афишу» тоже должна открывать расписание. Передайте Home тот же проп, onNavigate={setPage}, а кнопке добавьте onClick={() => onNavigate("showtimes")}.

Назад

2/9

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

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

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

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