SkateJS — это легковесная библиотека для создания веб-компонентов на базе стандарта Custom Elements и Shadow DOM. Одной из ключевых особенностей является реактивное управление состоянием компонента, что позволяет эффективно реализовывать условный рендеринг элементов на странице.
В SkateJS условный рендеринг строится на базе свойств
(props) компонента и функции
render, которая возвращает структуру DOM, обычно
используя JSX или шаблонные функции.
Каждое свойство, определенное в компоненте, может автоматически отслеживаться библиотекой. Пример объявления свойства:
import { define, props, Component, h } from 'skatejs';
class MyComponent extends Component {
static props = {
isVisible: props.boolean
};
renderCallback() {
return this.isVisible ? <p>Элемент видим</p> : null;
}
}
define('my-component', MyComponent);
props.boolean — определяет булево
свойство, изменения которого автоматически вызывают повторный
рендер.renderCallback — функция, которая
возвращает JSX, определяющий текущий вид компонента.Использование тернарного оператора внутри renderCallback
— один из базовых способов условного рендеринга.
Для сложных условий можно использовать многократные ветвления:
renderCallback() {
if (!this.isVisible) {
return <p>Элемент скрыт</p>;
}
switch (this.status) {
case 'loading':
return <p>Загрузка...</p>;
case 'success':
return <p>Данные успешно загружены</p>;
case 'error':
return <p>Произошла ошибка</p>;
default:
return <p>Неизвестный статус</p>;
}
}
renderCallback может быть любой, включая вызов
вспомогательных функций для генерации DOM.renderCallback только при
изменении свойств, участвующих в условии, что повышает
производительность.Для условного отображения списков часто используется комбинация массивов и фильтрации:
renderCallback() {
const items = this.items || [];
return (
<ul>
{items
.filter(item => item.visible)
.map(item => <li>{item.text}</li>)
}
</ul>
);
}
Условный рендеринг может быть вложенным, что полезно при создании сложных интерфейсов:
renderCallback() {
return (
<div>
{this.isAuthenticated ? (
<div>
<p>Добро пожаловать!</p>
{this.hasNotifications && <p>У вас есть новые уведомления</p>}
</div>
) : (
<p>Пожалуйста, войдите в систему</p>
)}
</div>
);
}
&&
позволяют добавлять блоки только при истинности условия.SkateJS поддерживает динамический рендер дочерних компонентов на основе условий:
renderCallback() {
return (
<div>
{this.showChart ? <chart-component data={this.data} /> : null}
</div>
);
}
Условный рендеринг может распространяться не только на контент, но и на классы CSS или атрибуты элементов:
renderCallback() {
return (
<button
class={this.isActive ? 'active' : 'inactive'}
disabled={!this.isEnabled}
>
Кнопка
</button>
);
}
class и disabled изменяются
динамически.renderCallback — логика рендеринга должна быть
простой и декларативной.Условный рендеринг в SkateJS строится на реактивных
свойствах, JSX-подходе и логике
renderCallback. Это позволяет создавать гибкие интерфейсы,
эффективно обновлять DOM и поддерживать читаемость кода даже при сложных
условиях отображения.