Кратко
СкопированоCustom даёт возможность создавать пользовательские события с произвольным именем и дополнительной информацией. Их можно запускать вручную и отслеживать через стандартные механизмы событий.
Пример
Скопировано
const myCustomEvent = new CustomEvent('mycustomevent', { detail: { key: 'value' }})
const myCustomEvent = new CustomEvent('mycustomevent', {
detail: {
key: 'value'
}
})
Как пишется
СкопированоЧтобы создать своё событие, нужно вызвать new . Конструктор принимает в себя два аргумента:
type— строка с названием события;options(необязательный) — объект со свойствами события:detail— данные любого типа, которые необходимо передать вместе с событием, но можно ничего и не передавать;bubbles— всплывает ли событие, по умолчаниюfalse;cancelable— можно ли отменить событие, по умолчаниюfalse;composed— должно ли событие переходить из теневого DOM в обычный, по умолчаниюfalse.
Как понять
СкопированоCustom создаёт пользовательское (кастомное) событие. Оно даёт разработчику возможность самостоятельно определить, когда событие происходит, как называется и какие данные с ним передаются. Пригодится, когда стандартных DOM-событий (например, click или input) недостаточно для описания происходящего на странице.
Custom похож на обычный Event. Основное отличие — Custom позволяет передать дополнительные данные, а Event нет.
Отправить пользовательское событие можно с помощью dispatch.
Подсказки
Скопировано💡 Кастомные события пригодятся, когда нужно сообщить другим частям приложения о каком-либо действии или изменении. Использование Custom позволяет избавиться от прямых зависимостей между модулями и сделать их менее связными.
// Модуль Аconst userLoginEvent = new CustomEvent('userlogin', { detail: { username: authData.username }})document.dispatchEvent(userLoginEvent)// Модуль Бconst username = document.getElementById('username')document.addEventListener('userlogin', (event) => { username.textContent = event.detail.username})
// Модуль А
const userLoginEvent = new CustomEvent('userlogin', {
detail: {
username: authData.username
}
})
document.dispatchEvent(userLoginEvent)
// Модуль Б
const username = document.getElementById('username')
document.addEventListener('userlogin', (event) => {
username.textContent = event.detail.username
})
💡 В качестве type в конструктор кастомного события можно передать название стандартного события, например, click. Когда событие инициируется, оно попадёт в обработчик события и будет обработано, однако, не приведёт к изменению состояния элемента, как это сделало бы обычное событие.
Попробуйте изменить в демке состояние чекбокса, кликнув на него и на обе кнопки: