Preact — это легковесный фреймворк для создания пользовательских
интерфейсов, совместимый с концепциями React, но оптимизированный по
размеру и скорости. Основная единица интерфейса в Preact —
элемент, который описывает, что должно быть отрисовано
на экране. Элемент в Preact является объектом с определённой структурой,
обычно создаваемым с помощью JSX или функции h().
В Preact элементы создаются двумя основными способами:
const element = <div class="container">Привет, Preact!</div>;
JSX компилируется в вызовы функции h(), которая создаёт
виртуальный DOM элемент.
h()import { h } from 'preact';
const element = h('div', { class: 'container' }, 'Привет, Preact!');
Первый аргумент — тип элемента (строка для HTML-элементов или
компонент), второй — объект свойств (props), третий и
последующие — дочерние элементы.
Props — это объект, содержащий свойства, передаваемые компоненту или элементу. Они определяют внешний вид и поведение элемента. Например:
const Button = ({ text, onClick }) => {
return <button onCl ick={onClick}>{text}</button>;
};
<Button text="Нажми меня" onCl ick={() => alert('Clicked!')} />
Основные особенности props:
В Preact большинство HTML-атрибутов работают как props, но есть отличия:
class вместо classNamefor вместо htmlForonclick,
oninput, onchange (в отличие от React, где
требуется camelCase)const element = <label for="input">Имя</label>;
const input = <input id="input" oncha nge={() => console.log('Изменено')} />;
Children — это содержимое элемента, передаваемое
через JSX или h():
const Card = ({ children }) => <div class="card">{children}</div>;
<Card>
<h2>Заголовок</h2>
<p>Описание карточки</p>
</Card>
Внутри компонента children доступны как массив или
одиночный элемент. Это позволяет создавать композицию интерфейса,
объединяя элементы внутри контейнера.
Props и children дают гибкость в управлении контентом. Например, элементы можно рендерить условно:
const UserStatus = ({ isLoggedIn }) => (
<div>
{isLoggedIn ? <p>В сети</p> : <p>Не в сети</p>}
</div>
);
Массив элементов также поддерживается:
const listItems = ['Яблоко', 'Банан', 'Вишня'].map(fruit =>
<li key={fruit}>{fruit}</li>
);
<ul>{listItems}</ul>
Важно использовать уникальный key при работе с
массивами, чтобы Preact мог эффективно обновлять виртуальный DOM.
h() или JSX, описывает, что должно быть отрисовано.function Welcome({ name }) {
return <h1>Привет, {name}!</h1>;
}
const element = <Welcome name="Алиса" />;
Компоненты могут быть вложенными, что позволяет строить сложные интерфейсы из простых блоков.
import { useRef } from 'preact/hooks';
const inputRef = useRef();
<input ref={inputRef} />;
<div dangerouslySetInnerHTML={{ __html: '<strong>Bold</strong>' }} />
<div style={{ color: 'red', fontSize: '16px' }}>Текст</div>
Каждый элемент в Preact можно представить как объект с ключевыми свойствами:
type — строка (HTML) или компонентprops — объект с атрибутами и childrenkey — уникальный идентификатор для массивов
элементовref — ссылка на DOM-узел или компонентЭта структура позволяет Preact эффективно создавать виртуальный DOM, отслеживать изменения и обновлять реальный DOM с минимальными затратами.