В MDX, как и в стандартном React, props передаются
компонентам в виде объекта, где каждый ключ соответствует имени
свойства, а значение — его содержимому. Деструктуризация props позволяет
сразу извлекать необходимые свойства без необходимости обращаться к
объекту через точку (props.name), что делает код более
читаемым и компактным.
Предположим, есть компонент Button в MDX:
export const Button = (props) => {
return <button>{props.label}</button>;
};
Использование этого компонента в MDX:
<Button label="Нажми меня" />
Без деструктуризации приходится обращаться к свойствам через
props. С деструктуризацией компонент можно переписать
так:
export const Button = ({ label }) => {
return <button>{label}</button>;
};
Здесь { label } извлекает свойство label
напрямую из объекта props.
Если компонент принимает несколько props, деструктуризация позволяет сразу получить все нужные значения:
export const Card = ({ title, description, imageUrl }) => {
return (
<div className="card">
<img src={imageUrl} alt={title} />
<h2>{title}</h2>
<p>{description}</p>
</div>
);
};
В MDX использование выглядит так:
<Card
title="Пример карточки"
description="Описание карточки"
imageUrl="/img/example.png"
/>
Деструктуризация делает код более лаконичным,
устраняя повторяющиеся обращения к props.
Можно задавать значения по умолчанию для props, чтобы компонент корректно работал, даже если некоторые свойства не были переданы:
export const Button = ({ label = "Кнопка", disabled = false }) => {
return <button disabled={disabled}>{label}</button>;
};
Если компонент используется без указания label или
disabled:
<Button />
Он отобразит кнопку с текстом "Кнопка" и активным
состоянием. Это особенно полезно при создании повторно используемых
компонентов.
Если props имеют сложную структуру, можно использовать вложенную деструктуризацию:
export const Profile = ({ user: { name, age, avatar } }) => {
return (
<div className="profile">
<img src={avatar} alt={name} />
<h3>{name}</h3>
<p>{age} лет</p>
</div>
);
};
MDX-использование:
<Profile user={{ name: "Алексей", age: 28, avatar: "/avatars/alex.png" }} />
Это позволяет извлекать вложенные данные напрямую без лишних промежуточных переменных.
Для передачи оставшихся props в компонент можно использовать оператор
...rest:
export const Input = ({ type = "text", placeholder, ...rest }) => {
return <input type={type} placeholder={placeholder} {...rest} />;
};
Такой подход полезен для оберток над стандартными HTML-элементами, когда нужно передавать дополнительные атрибуты:
<Input placeholder="Введите имя" className="input-field" />
className будет автоматически передан внутрь
<input> благодаря ...rest.
props в каждом обращении.Cannot read property of undefined.Деструктуризация props является фундаментальной практикой в MDX и React, позволяющей писать компоненты лаконично, гибко и безопасно, особенно при работе с повторно используемыми элементами интерфейса.