События в Inferno управляются с использованием концепции виртуального DOM и делегирования событий, что обеспечивает высокую производительность и минимизацию лишних операций на реальном DOM. В отличие от нативного подхода в JavaScript, Inferno применяет единый обработчик событий на уровне корневого элемента, что снижает количество слушателей и ускоряет рендеринг.
Основной принцип работы системы событий в Inferno заключается в делегировании:
Делегирование обеспечивает следующие преимущества:
События в Inferno привязываются к элементам через свойства, имитирующие стандартные DOM-события, с использованием camelCase:
import { render } from 'inferno';
import { createElement } from 'inferno-create-element';
function handleClick(event) {
console.log('Клик по кнопке', event.target);
}
const button = createElement('button', { onClick: handleClick }, 'Нажми меня');
render(button, document.getElementById('app'));
Особенности регистрации:
on (onClick, onMouseEnter,
onKeyDown и т.д.).Inferno использует синтетические события, что позволяет:
target, currentTarget, keyCode и
другие всегда ведут себя одинаково в разных браузерах.Пример:
function handleInputChange(event) {
console.log('Значение ввода:', event.target.value);
}
const input = createElement('input', { onInput: handleInputChange });
render(input, document.getElementById('app'));
Событие onInput работает во всех поддерживаемых
браузерах одинаково, несмотря на различия между input и
change.
preventDefault() и
stopPropagation() доступны напрямую:function handleSubmit(event) {
event.preventDefault();
console.log('Форма отправлена, стандартное поведение предотвращено');
}
const form = createElement('form', { onSubmit: handleSubmit },
createElement('button', null, 'Отправить')
);
render(form, document.getElementById('app'));
function handleClickWithParam(id, event) {
console.log('Клик по элементу с id:', id);
}
const button = createElement('button', { onClick: (e) => handleClickWithParam(42, e) }, 'Нажми');
key,
code, clientX, clientY и т.д.,
что позволяет реализовать сложные взаимодействия без прямой работы с
нативным DOM.В Inferno добавление и удаление обработчиков синхронизировано с виртуальным DOM. Если элемент изменяет свойства события, Inferno автоматически обновляет внутренние слушатели:
const button = createElement('button', { onClick: null }, 'Нажми');
render(button, document.getElementById('app'));
// Позже добавление обработчика
const buttonWithHandler = createElement('button', { onClick: handleClick }, 'Нажми');
render(buttonWithHandler, document.getElementById('app'));
Это позволяет безопасно изменять обработчики без риска утечек памяти.
Inferno допускает создание пользовательских событий через синтетическую систему:
Система событий Inferno сочетает высокую производительность с простотой API, обеспечивая контроль над поведением элементов без прямого вмешательства в нативный DOM. Она является ключевым инструментом для построения интерактивных интерфейсов с большим количеством элементов.