Компоненты в Inferno представляют собой строительные блоки пользовательского интерфейса. Каждый компонент инкапсулирует состояние, логику отображения и поведение, что позволяет создавать сложные приложения из повторно используемых элементов. В Inferno доступны два основных типа компонентов:
props) и возвращают описание UI в виде
JSX или VNode.Inferno.Component, предоставляя возможность работы с
внутренним состоянием и методами жизненного цикла.Функциональные компоненты оптимальны для статичных частей интерфейса и могут использовать хуки для управления состоянием и побочными эффектами, тогда как классовые компоненты удобны для более сложной логики и интеграции с методами жизненного цикла.
Классовый компонент создается следующим образом:
import { Component } 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>
<p>Счёт: {this.state.count}</p>
<button onCl ick={this.increment}>Увеличить</button>
</div>
);
}
}
export default Counter;
Функциональный компонент с использованием хуков состояния:
import { useState } from 'inferno';
function CounterFunction() {
const [count, setCount] = useState(0);
return (
<div>
<p>Счёт: {count}</p>
<button onCl ick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
}
Ключевое отличие заключается в том, что функциональные компоненты не имеют собственного экземпляра, а их состояние управляется хуками.
Жизненный цикл компонента делится на три основных этапа: монтаж, обновление и размонтирование.
Этап, когда компонент впервые создаётся и добавляется в DOM. Для классовых компонентов доступны следующие методы:
componentWillMount() – вызывается перед первым рендером
(устаревший, использовать с осторожностью).render() – возвращает описание интерфейса.componentDidMount() – вызывается после добавления
компонента в DOM, идеальное место для инициализации сторонних библиотек
или асинхронных запросов.Функциональные компоненты используют эффекты
(useEffect) для имитации
componentDidMount:
import { useEffect } from 'inferno';
useEffect(() => {
console.log('Компонент смонтирован');
}, []);
Компонент обновляется при изменении props или state. Основные методы классовых компонентов:
shouldComponentUpdate(nextProps, nextState) – позволяет
оптимизировать производительность, предотвращая ненужные рендеры.componentWillUpdate(nextProps, nextState) – вызывается
перед обновлением (устаревший метод, редко используется).render() – повторный рендер с новыми данными.componentDidUpdate(prevProps, prevState) – вызывается
после обновления DOM, удобно для синхронизации с внешними API.В функциональных компонентах обновление обрабатывается через
useEffect, реагирующий на изменение зависимостей:
useEffect(() => {
console.log('count изменился');
}, [count]);
Когда компонент удаляется из DOM, вызывается метод
componentWillUnmount(). Он используется для очистки
таймеров, подписок или других ресурсов:
componentWillUnmount() {
clearInterval(this.timer);
}
В функциональных компонентах очистка осуществляется через
возвращаемую функцию в useEffect:
useEffect(() => {
const timer = setInterval(() => console.log('тик'), 1000);
return () => clearInterval(timer);
}, []);
Компоненты могут передавать данные друг другу через props. Компонент-родитель управляет состоянием и передает его вниз:
function Parent() {
const [value, setValue] = useState(0);
return <Child count={value} increment={() => setValue(value + 1)} />;
}
function Child({ count, increment }) {
return (
<div>
<p>Счёт: {count}</p>
<button onCl ick={increment}>Увеличить</button>
</div>
);
}
Для глубокого управления состоянием в больших приложениях часто
используются контексты (Inferno.createContext) или
сторонние менеджеры состояния, такие как Redux или MobX.
Компонентная архитектура Inferno сочетает удобство разработки с высокой скоростью обновления интерфейса, обеспечивая мощный инструмент для создания современных веб-приложений.