Импорт и экспорт компонентов
Магия компонентов заключается в их повторном использовании: вы можете создавать компоненты, состоящие из других компонентов. Но по мере того, как вы вкладываете всё больше и больше компонентов, часто имеет смысл начать разделять их на разные файлы. Это позволяет сохранять файлы удобными для просмотра и повторно использовать компоненты в большем количестве мест.
Вы узнаете
- Что такое файл корневого компонента
- Как импортировать и экспортировать компонент
- Когда использовать импорт и экспорт по умолчанию и именованные
- Как импортировать и экспортировать несколько компонентов из одного файла
- Как разделить компоненты на несколько файлов
Файл корневого компонента
В разделеВаш первый компонентвы создали компонентProfileи компонентGallery, который его отображает:
В настоящее время они находятся вфайле корневого компонента,названном в этом примереApp.js. В зависимости от вашей настройки, ваш корневой компонент может находиться в другом файле. Если вы используете фреймворк с маршрутизацией на основе файлов, например Next.js, ваш корневой компонент будет разным для каждой страницы.
Экспорт и импорт компонента
Что, если в будущем вы захотите изменить стартовый экран и разместить там список научных книг? Или поместить все профили в другое место? Имеет смысл вынестиGallery и Profileиз файла корневого компонента. Это сделает их более модульными и пригодными для повторного использования в других файлах. Вы можете переместить компонент в три шага:
- Создайтеновый JS-файл для размещения компонентов.
- Экспортируйтеваш функциональный компонент из этого файла (используя либоэкспорт по умолчанию, либоименованный экспорт).
- Импортируйтеего в файле, где вы будете использовать компонент (используя соответствующую технику импортапо умолчаниюилиименованногоэкспорта).
Здесь иProfile, иGalleryбыли вынесены изApp.jsв новый файл с именемGallery.js. Теперь вы можете изменитьApp.js, чтобы импортироватьGalleryизGallery.js:
Обратите внимание, как этот пример теперь разбит на два файла компонентов:
Gallery.js:- Определяет компонент
Profile, который используется только в том же файле и не экспортируется. - Экспортирует компонент
Galleryкак экспорт по умолчанию.
- Определяет компонент
App.js:- Импортирует
Galleryкакимпорт по умолчаниюизGallery.js. - Экспортирует корневой компонент
Appкак экспорт по умолчанию.
- Импортирует
Примечание
Вы можете встретить файлы, которые опускают расширение.js, например:
Оба варианта,'./Gallery.js'или'./Gallery', будут работать с React, хотя первый вариант ближе к тому, как работаютнативные ES-модули.
Экспорт и импорт нескольких компонентов из одного файла
Что, если вы хотите показать только одинProfileвместо галереи? Вы можете также экспортировать компонентProfile. Но в Gallery.jsуже естьэкспорт по умолчанию, а у вас не может бытьдвухэкспортов по умолчанию. Вы можете создать новый файл с экспортом по умолчанию или добавитьименованныйэкспорт дляProfile.В файле может быть только один экспорт по умолчанию, но он может содержать множество именованных экспортов!
Примечание
Чтобы уменьшить потенциальную путаницу между экспортом по умолчанию и именованным экспортом, некоторые команды выбирают использование только одного стиля (по умолчанию или именованного) или избегают их смешивания в одном файле. Делайте то, что лучше всего работает для вас!
СначалаэкспортируйтеProfileизGallery.jsс помощью именованного экспорта (без ключевого словаdefault):
ЗатемимпортируйтеProfileизGallery.js в App.jsс использованием именованного импорта (с фигурными скобками):
Наконец,отрендерите<Profile />из компонентаApp:
ТеперьGallery.jsсодержит два экспорта: экспорт по умолчаниюGalleryи именованный экспортProfile. App.jsимпортирует оба. Попробуйте изменить<Profile />на<Gallery />и обратно в этом примере:
Теперь вы используете сочетание экспортов по умолчанию и именованных экспортов:
Gallery.js:- Экспортирует компонент
Profileкак именованный экспорт с именемProfile. - Экспортирует компонент
Galleryкак экспорт по умолчанию.
- Экспортирует компонент
App.js:- Импортирует
Profileкакименованный импорт с именемProfileизGallery.js. - Импортирует
Galleryкакимпорт по умолчаниюизGallery.js. - Экспортирует корневой компонент
Appкак экспорт по умолчанию.
- Импортирует
Резюме
На этой странице вы узнали:
- Что такое файл корневого компонента
- Как импортировать и экспортировать компонент
- Когда и как использовать импорты и экспорты по умолчанию и именованные
- Как экспортировать несколько компонентов из одного файла
Попробуйте выполнить несколько заданий
Challenge 1 of 1:Разделите компоненты дальше #
В настоящее время Gallery.js экспортирует и Profile, и Gallery, что немного сбивает с толку.
Переместите компонент Profile в его собственный файл Profile.js, а затем измените компонент App так, чтобы он рендерил и <Profile />, и <Gallery /> один за другим.
Вы можете использовать либо экспорт по умолчанию, либо именованный экспорт для Profile, но убедитесь, что используете соответствующий синтаксис импорта как в App.js, так и в Gallery.js! Вы можете обратиться к таблице из подробного раздела выше:
После того как вы заставите это работать с одним видом экспорта, сделайте так, чтобы это работало и с другим видом.
