Функциональные компоненты в Inferno представляют собой чистые функции, которые принимают props и возвращают виртуальный DOM. Они являются фундаментальной единицей построения интерфейсов и обеспечивают высокую производительность благодаря отсутствию лишней обвязки, присущей классовым компонентам.
import { render } from 'inferno';
import { Component } from 'inferno';
const Greeting = (props) => {
return <h1>Привет, {props.name}!</h1>;
};
render(<Greeting name="Мир" />, document.getElementById('app'));
В данном примере Greeting — это функциональная
компонента, которая принимает объект props и возвращает
элемент JSX. JSX в Inferno компилируется в виртуальный DOM, который
затем эффективно обновляется библиотекой.
Props в функциональных компонентах неизменяемы и служат для передачи данных сверху вниз по дереву компонентов. Изменение props должно происходить только на уровне родительской компоненты.
const UserCard = ({ name, age }) => (
<div>
<h2>{name}</h2>
<p>Возраст: {age}</p>
</div>
);
render(<UserCard name="Алексей" age={30} />, document.getElementById('app'));
Ключевые моменты:
Inferno поддерживает хуки для управления состоянием и побочными
эффектами внутри функциональных компонентов. Основные хуки:
useState, useEffect, useRef,
useCallback и useMemo.
import { useState, useEffect } from 'inferno';
const Counter = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log('Компонента смонтирована');
}, []);
return (
<div>
<p>Счетчик: {count}</p>
<button onCl ick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
};
Особенности хуков в Inferno:
useState создаёт локальное состояние компоненты и
возвращает текущее значение и функцию для его обновления.useEffect позволяет выполнять побочные эффекты:
загрузка данных, подписки, таймеры.Inferno использует высокоэффективный механизм диффинга виртуального DOM, однако дополнительная оптимизация возможна:
import { memo } from 'inferno';
const ExpensiveComponent = ({ data }) => {
// тяжелые вычисления
return <div>{data}</div>;
};
export default memo(ExpensiveComponent);
import { useCallback } from 'inferno';
const Button = ({ onClick }) => {
const handleClick = useCallback(() => {
console.log('Нажатие');
}, []);
return <button onCl ick={handleClick}>Клик</button>;
};
import { useMemo } from 'inferno';
const List = ({ items }) => {
const sortedItems = useMemo(() => items.sort(), [items]);
return <ul>{sortedItems.map(item => <li key={item}>{item}</li>)}</ul>;
};
Функциональные компоненты могут быть вложенными и комбинироваться для создания сложных интерфейсов.
const Avatar = ({ src }) => <img src={src} alt="avatar" />;
const Profile = ({ user }) => (
<div>
<Avatar src={user.avatar} />
<h3>{user.name}</h3>
</div>
);
Преимущества вложенных компонентов:
События в Inferno привязываются через атрибуты, аналогично React. Поддерживаются стандартные события браузера.
const Clicker = () => {
const handleClick = () => alert('Нажали на кнопку!');
return <button onCl ick={handleClick}>Нажми меня</button>;
};
Особенности:
Функциональные компоненты в Inferno представляют собой основной инструмент современного фронтенд-разработчика, позволяя создавать быстрые, масштабируемые и легко поддерживаемые приложения.