Inferno использует систему синтетических событий, аналогичную той, что реализована в React. Синтетические события представляют собой обёртку над нативными событиями браузера, обеспечивая единый интерфейс для работы с событиями и оптимизацию производительности за счёт делегирования.
Делегирование событий Все события в Inferno делегируются через единый обработчик на корневом DOM-элементе. Это позволяет:
Кроссбраузерность Синтетические события скрывают
различия между браузерами, предоставляя единый API.
Например, методы preventDefault() и
stopPropagation() работают одинаково во всех поддерживаемых
браузерах.
Автоматическое пуллирование В отличие от
нативных событий, синтетические объекты событий могут
переиспользоваться Inferno для экономии памяти. После
вызова обработчика свойства события становятся недоступными, если не
сохранять их явно через метод event.persist().
Inferno поддерживает все стандартные DOM-события, включая:
onClick,
onDoubleClick, onMouseEnter,
onMouseLeave, onMouseMoveonKeyDown,
onKeyPress, onKeyUponFocus,
onBlur, onChange, onInputonSubmit,
onResetonScroll,
onResize, onWheelКаждое событие в Inferno представлено как свойство
компонента, начинающееся с on и следующей за ним
заглавной буквы (camelCase).
Обработчики событий в Inferno передаются как функции:
function handleClick(event) {
console.log('Клик обработан', event.type);
}
const Button = () => (
<button onCl ick={handleClick}>Нажми меня</button>
);
При этом event внутри обработчика —
синтетический объект события. Он содержит стандартные
свойства:
event.target — элемент, на котором произошло
событиеevent.currentTarget — элемент, к которому привязан
обработчикevent.type — тип событияpreventDefault(),
stopPropagation()Асинхронность События в Inferno обрабатываются в фазе батча. Это значит, что при множественных событиях внутри одного цикла событий они могут быть объединены для оптимизации перерисовки.
Доступ к реальному DOM Свойства
nativeEvent и target позволяют получить ссылку
на исходное нативное событие браузера.
События форм и ввода Для
<input> и <textarea> синтетические
события обеспечивают корректное обновление состояния через
onChange и onInput. Inferno отслеживает
значения элементов и обеспечивает синхронизацию с виртуальным
DOM, что предотвращает несогласованность состояния и реального
DOM.
Обработчики можно привязывать к функциональным и классовым
компонентам. Для классовых компонентов важно учитывать контекст
this:
class MyComponent extends Inferno.Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick(event) {
console.log(this.props.message, event.type);
}
render() {
return <button onCl ick={this.handleClick}>Клик</button>;
}
}
Для функциональных компонентов используется замыкание:
const MyComponent = ({ message }) => {
const handleClick = event => console.log(message, event.type);
return <button onCl ick={handleClick}>Клик</button>;
};
Для передачи дополнительных параметров обработчику создаются обёртки функций:
const handleClick = (id, event) => {
event.preventDefault();
console.log('ID элемента:', id);
};
<button onCl ick={event => handleClick(42, event)}>Клик</button>
event delegation повышает
производительность.bind или стрелочных функций
в JSX снижает нагрузку на GC.preventDefault() — отменяет действие браузера по
умолчаниюstopPropagation() — останавливает всплытие событияpersist() — сохраняет объект события для дальнейшего
использования после батчаСистема синтетических событий Inferno обеспечивает
оптимизированную и безопасную обработку событий. Она
уменьшает накладные расходы на работу с DOM, гарантирует единый
интерфейс во всех браузерах и позволяет разработчику контролировать
поток событий через методы preventDefault,
stopPropagation и persist. Правильное
использование синтетических событий в сочетании с виртуальным DOM
обеспечивает высокую производительность и предсказуемое поведение
интерфейса.