Чем отличается синтетическое событие клика от обычного в javascript фреймворках?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Сегодня, стало более ли менее стандартом использование синтетических событий в современных js фреймворках, нежели обычный addEventListener. Но, как же работают эти события? В данной статье, я постараюсь на примере клика в Cample.js версии 3.2.0-beta.1 рассказать об этом.

Прежде всего, когда говорится о работе с событиями, очевидно, что речь заходит о конструкции addEventListener, которая выглядит следующим образом:

element.addEventListener("событие", "функция", useCapture или options);

Но, так ли это быстро? Как оказалось, это не быстро из-за специфики работы.

Когда речь заходит о фреймворках, важна каждая секунда работы, ведь это в теории тысячи сэкономленных часов использования сайтов или веб-приложений.

Поэтому, нужно было придумать альтернативу, которая заменит такой подход на более быстрый.

Самая банальная идея событий на сайте - что-то выдаёт действие будь то мышка или клавиатура, а javascript вызывает функцию, которая на это событие срабатывает. Тогда, возникает необходимость в двух вещах - обрабатывать событие и где-то его хранить. Но, где?

Если отойти немного назад, то надо вспомнить о том, что DOM элемент является, можно сказать, объектом со своими свойствами. У него есть текст, у него есть следующий элемент и предыдущий и т.д. Так вот, что если функцию хранить в самом элементе (объекте) DOM? Это сразу решает две проблемы: как понять, "на что вызывать функцию?" и "где её хранить?".

То-есть, грубо говоря, как это выглядит:

<div></div>["клик"] = функция;

Соглашусь, что это выглядит странно, но, если получить элемент через getElementById, к примеру, и вывести его в консоль как объект, то действительно, это будет выглядеть как-то так, что мы присвоили свойство тегу в HTML (понятное дело, что элементу в DOM) со значением функции.

Так вот, остаётся вторая проблема, а как, собственно, обрабатывать событие клика зная, что у нас в DOM элементе есть функция. Это тоже достаточно интересный вопрос, но реализация очевидно будет связанна с addEventListener, потому что этот метод способен обрабатывать события.

Возникает тогда вопрос, а куда его ставить, если на Element в DOM будет медленно? Тут есть тоже достаточно крутое решение. Можно поставить обработку события прямо на документ, а в свойствах принимать target, по которому кликнули. Как это будет выглядеть в теории в javascript:

document.addEventListener("click", (e)=>...);

Таким образом, есть функция, которая срабатывает, когда кликается на элемент в document, а есть место, куда кликается. Так вот, это место клика как раз может являться объектом DOM, в который было вложено свойство с функцией срабатывания.

К примеру, в Cample.js, обработка будет выглядеть следующим образом:

const newEach = each("new-each",
    ()=>["val"],
    `<div id="el" :click="{{importedData.fn(data)}}" 
    key="{{index}}">{{data}}</div>`
);

Для элемента div с id "el", будет присвоена функция, которая приходит из импортированных данных. Если по документу будет кликнуто мышкой, тогда данная функция будет вызвана.

Примерно так, будет выглядеть синтетическая обработка события клик в современных фреймворках.

Всем большое спасибо за прочтение данной статьи!

Источник: https://habr.com/ru/articles/767466/


Интересные статьи

Интересные статьи

Недавно я столкнулся с одной не очень сложной задачей на leetcode. В рамках задачи нужно было реализовать алгоритм поиска подстроки в строке. Пока я пытался сделать задачу, я понял, что я очень мало з...
Как копировать в буфер картинки. Какие типы данных можно класть в буфер. Поддержка кастомных типов. Как сделать свои кнопки копировать/вставить.
Предположим, вы работаете над веб-приложением. В таком случае весьма вероятно то, что вам приходится иметь дело не только с JavaScript-модулями, но и с самыми разными другими ресурсами. Это и веб-ворк...
React — это библиотека JavaScript для создания пользовательского интерфейса. Это официальное определение React. Но что если вы не знаете, что такое JavaScript? Что если вы не разработч...
В последние несколько лет JavaScript был самым популярным и распространённым языком для разработки одностраничных приложений (Single Page Application, SPA). Это так и сегодня. Но неда...