Создавай переиспользуемые компоненты-контейнеры через проп children и разбивай свои экраны на понятные зоны ответственности.
Открыть этот урок в KodokonНекоторые компоненты не знают своего содержимого заранее: карточка, модальное окно, макет страницы. React решает это специальным пропом children: всё, что ты помещаешь между открывающим и закрывающим тегами компонента, передаётся ему и готово к вставке туда, куда он захочет. Контейнер отвечает за рамку, вызывающий код - за содержимое.
function Card({ children }) {
return <section className="card">{children}</section>;
}
function App() {
return (
<Card>
<h2>Invoice #1024</h2>
<p>Amount: €49.90</p>
</Card>
);
}Когда одного слота мало, передавай JSX через именованные пропсы: заголовок, подвал, панель действий. Проп может принять React-элемент так же, как любое другое значение. Ты получаешь несколько «слотов», каждый с понятным именем.
function Modal({ title, footer, children }) {
return (
<div className="modal">
<header>{title}</header>
<div className="modal-body">{children}</div>
<footer>{footer}</footer>
</div>
);
}Композиция направляет и разбиение. У компонента должна быть одна узнаваемая зона ответственности: показать строку пользователя, разложить список. Как только компонент набирает несколько ролей, вынеси подкомпоненты: каждый станет короче, его легче тестировать и переиспользовать в другом месте.
function UserList({ users }) {
return (
<ul>
{users.map((user) => (
<UserRow key={user.id} user={user} />
))}
</ul>
);
}
function UserRow({ user }) {
return (
<li>
<strong>{user.name}</strong> - {user.email}
</li>
);
}children компонента?children?