Для начала работы с Inferno необходимо подготовить окружение. Основной способ — использовать пакетный менеджер npm. Создание проекта начинается с инициализации npm и установки базовых зависимостей:
npm init -y
npm install inferno inferno-create-element inferno-component
inferno — ядро фреймворка, обеспечивающее высокую
производительность и виртуальный DOM.
inferno-create-element — утилита для создания элементов
JSX/JS-структуры. inferno-component — позволяет создавать
классовые компоненты, если требуется использование состояния и методов
жизненного цикла.
Для разработки также рекомендуется установить Babel для транспиляции современного JavaScript и JSX:
npm install --save-dev @babel/core @babel/preset-env @babel/preset-react babel-loader webpack webpack-cli webpack-dev-server
Настройка Webpack позволяет собрать проект в один файл и использовать современные возможности JS, включая поддержку JSX.
Inferno поддерживает функциональные и классовые компоненты. Классический подход для первого приложения — создание функционального компонента:
import { render } from 'inferno';
import { createElement } from 'inferno-create-element';
const App = () => {
return createElement('div', { className: 'app-container' }, 'Привет, Inferno!');
};
render(
createElement(App, null, null),
document.getElementById('root')
);
createElement — аналог JSX, создаёт
виртуальный DOM-узел.render — отрисовывает виртуальный DOM
в реальный.document.getElementById('root') —
корневой элемент страницы, куда будет монтироваться приложение.При использовании JSX вместо createElement код
упрощается:
/** @jsx createElement */
import { render } from 'inferno';
import { createElement } from 'inferno-create-element';
const App = () => (
<div className="app-container">
Привет, Inferno!
</div>
);
render(<App />, document.getElementById('root'));
Классовые компоненты необходимы, если требуется управление состоянием или использование методов жизненного цикла:
import { Component } from 'inferno-component';
import { render } from 'inferno';
class Counter extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment = () => {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
<div>
<h1>Счётчик: {this.state.count}</h1>
<button onCl ick={this.increment}>Увеличить</button>
</div>
);
}
}
render(<Counter />, document.getElementById('root'));
this.state — объект состояния
компонента.this.setState — метод обновления
состояния, после которого Inferno автоматически обновляет виртуальный и
реальный DOM.componentDidMount) можно использовать для выполнения логики
после монтирования компонента.Inferno поддерживает стандартные DOM-события через атрибуты компонента:
const Button = () => {
const handleClick = () => {
console.log('Кнопка нажата');
};
return <button onCl ick={handleClick}>Нажми меня</button>;
};
События могут быть динамическими и зависят от состояния:
class Toggle extends Component {
constructor() {
super();
this.state = { isOn: true };
}
toggle = () => {
this.setState({ isOn: !this.state.isOn });
}
render() {
return (
<button onCl ick={this.toggle}>
{this.state.isOn ? 'Включено' : 'Выключено'}
</button>
);
}
}
Для рендеринга массивов данных используется метод map и
уникальный key для каждого элемента:
const ItemList = ({ items }) => (
<ul>
{items.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
const data = [
{ id: 1, name: 'Элемент 1' },
{ id: 2, name: 'Элемент 2' },
{ id: 3, name: 'Элемент 3' },
];
render(<ItemList items={data} />, document.getElementById('root'));
key помогает Inferno эффективно
обновлять список при изменении данных.Стили можно добавлять несколькими способами:
<div className="highlight">Текст с классом</div>
<div style={{ color: 'red', fontWeight: 'bold' }}>Красный текст</div>
Компоненты можно комбинировать для построения сложных интерфейсов:
const Header = () => <h1>Заголовок приложения</h1>;
const Footer = () => <footer>© 2025 Inferno</footer>;
const App = () => (
<div>
<Header />
<p>Основной контент приложения</p>
<Footer />
</div>
);
render(<App />, document.getElementById('root'));
Inferno обновляет только изменённые части DOM благодаря виртуальному
DOM. Любое изменение состояния через setState или пропсы
приводит к минимальной перерисовке. Это обеспечивает высокую
производительность и экономию ресурсов браузера, особенно при работе с
динамическими списками и сложными интерфейсами.
Эти основы позволяют создать полноценное первое приложение на Inferno с компонентами, состоянием, событиями и динамическими списками, используя как функциональный, так и классовый подход.