В Preact пропсы (props) играют ключевую роль в передаче данных от родительских компонентов к дочерним. Деструктуризация пропсов позволяет сделать код более компактным, читаемым и удобным для поддержки, особенно при работе с компонентами, которые получают большое количество свойств.
Деструктуризация — это синтаксис JavaScript, который позволяет
извлекать значения из объектов и массивов в отдельные переменные. В
контексте Preact деструктуризация применяется к объекту
props, передаваемому компоненту.
Пример базового компонента:
import { h } from 'preact';
function Button(props) {
return <button>{props.label}</button>;
}
Использование деструктуризации позволяет заменить обращение
props.label на более удобное:
function Button({ label }) {
return <button>{label}</button>;
}
Здесь { label } — это деструктуризация объекта
props, которая извлекает свойство label
напрямую в локальную переменную. Такой подход уменьшает количество
повторяющихся props. и делает компонент более
читабельным.
Preact поддерживает деструктуризацию с указанием значений по умолчанию. Это удобно, когда некоторые пропсы могут быть опциональными.
function Button({ label = 'Click me', disabled = false }) {
return <button disabled={disabled}>{label}</button>;
}
Если компонент будет вызван без пропса label,
автоматически будет использовано значение 'Click me'. Это
позволяет избежать проверки
props.label ? props.label : 'Click me' внутри тела
функции.
Иногда необходимо передавать компоненту дополнительные пропсы без
явного их перечисления. Для этого используется оператор
...rest:
function Button({ label, ...rest }) {
return <button {...rest}>{label}</button>;
}
В этом примере все остальные свойства, кроме label,
будут автоматически переданы элементу <button>. Такой
подход полезен для универсальных компонентов, которым требуется
поддержка различных атрибутов HTML, таких как onClick,
className или style.
Preact-компоненты часто получают сложные объекты в пропсах. Деструктуризация позволяет извлекать вложенные свойства напрямую:
function UserCard({ user: { name, age }, isActive }) {
return (
<div className={isActive ? 'active' : ''}>
<h2>{name}</h2>
<p>{age} лет</p>
</div>
);
}
Здесь user — это объект с полями name и
age, которые сразу извлекаются для использования в JSX. Это
сокращает количество кода и делает структуру компонента прозрачной.
Для избежания конфликтов имен или для более удобной семантики можно использовать переименование:
function Profile({ user: { name: userName, age: userAge } }) {
return (
<div>
<p>Имя: {userName}</p>
<p>Возраст: {userAge}</p>
</div>
);
}
Такой подход помогает поддерживать уникальные имена переменных внутри функции, даже если внешние объекты имеют одинаковые поля.
Preact полностью поддерживает стрелочные функции. Деструктуризация пропсов применяется одинаково:
const Button = ({ label, onClick }) => (
<button onCl ick={onClick}>{label}</button>
);
Комбинация стрелочных функций и деструктуризации делает компоненты максимально компактными и легкими для чтения.
Деструктуризация пропсов не влияет заметно на производительность. Preact компилируется очень эффективно, и извлечение полей из объекта происходит на уровне обычных операций JavaScript. Основной выигрыш заключается именно в удобстве написания и поддержания кода, особенно при больших и сложных компонентах.
props.....rest для передачи
дополнительных атрибутов без явного перечисления.Деструктуризация пропсов является неотъемлемой практикой в современном Preact-коде. Она повышает читаемость, упрощает поддержку и делает компоненты более декларативными и выразительными.