Modüler Kod için Özel Javascript Event Tutrs Oluşturun
Özel JavaScript Event Tutarlar'ı modüler Kod için Anlamak
Modern web uygulamaları temiz, kullanılabilir kod talep eder. Etkinlik işleme, etkinlik işleme veya global kapsamınızı karıştıran birçok geliştirici hala tasarıma, uygulama ve ölçeklenebilir, özel JavaScript olay eller oluşturmak için nasıl etkinleştirilir, test edilebilir fonksiyonlar inşa edebilirsiniz.
Olay delegasyonu ve özel olaylar gibi temelleri, performans en iyi uygulamaları ve gerçek dünya örneklerini kapsayacak şekilde, herhangi bir kullanıcı etkileşiminin temiz bir şekilde yönetilmesi için bir üretim hazır araçta bir araçta bulunacağız.
Neden Özel Etkinlik Modüler Kod için Önemlidir
Bir DOM elementine, [[Döneticileri kullanarak bir düz işlev eklerseniz, bir kez eller tanımlıyorsunuz ve ihtiyaç duyulan her yerde daha kolay bir şekilde ifade edilebilirlik sağlarlar ve kod duplikasyonu azaltırlar.
Özel eller aynı sayfada birden çok forma eklendiğinde, geçerlilik kuralları değiştirmek yerine bir işlevi güncelleyebilirsiniz.
Anahtar Faydaları
- [FONT:0)Reusability - Bir kez yazın, birçok elemente ekleyin.
- [FONT:0)Okulanabilirlik – Clear function names document.
- [FONT:0)Testability - Birim testlerinde eller mantığını yapılandırın.
- [FONT=0)Maintainability) – Etkileyici olmayan değişiklikler.
- [FONT:0)Performance[[Dönetici:0)[[[Dönetici:0)
Yapı Özel Olay Tutarlar: Temeller
Düzeltmelere girmeden önce, temel mekanizmayla rahat olmanızı sağlar. JavaScript'te, bir eller fonksiyonunu hedef bir element üzerinde belirli bir olay türüne bağlarsınız. eller bir OKT:5 nesnesi ile ilgili özellikler içerir.
İşte basit bir özel tıklama eller:
const button = document.querySelector('#submit-btn');
function handleSubmitClick(event) {
event.preventDefault();
const formData = new FormData(document.querySelector('#myForm'));
console.log('Form data:', Object.fromEntries(formData));
// Send via fetch...
}
button.addEventListener('click', handleSubmitClick);
Bir modülden ihraç edilebilir ve başka bir yerde ithal edilebilir ve herhangi bir düğmeye eklenebilir: Olay nesnesini alır ve küresel değişkenlere veya lineer koda güvenmeksizin çalışmasını sağlar.
Boşluklara Geçmek için Para Para Para Kazanmak
Bazen bir eller ekstra bağlama ihtiyaç duyar. kapatmalar yerine, fabrika işlevinde eller kapatın:
function createClickHandler(userId, callback) {
return function(event) {
event.preventDefault();
callback(userId);
};
}
const handler = createClickHandler('123', loadProfile);
document.getElementById('profile-btn').addEventListener('click', handler);
Bu model eller mantığı test edilebilir: alay parametreleri ile 444FLT:14 çağırabilirsiniz ve çağrıyı doğru bir şekilde doğrulayın.
Etkinlik Gücü Delegasyon
Event delegasyonu modüler, performansçı bir koddur. Her çocuk elemanına bir dinleyici eklemek yerine, bir ebeveyne bir tane yapıştırın ve etkinlik boğasını kullanın. Bu teknik özellikle dinamik içerik için değerli - sayfa yükleri otomatik olarak ekledikten sonra öğeler.
Örnek: öğelerin dinamik olarak ekleyebileceği bir todo listesi.
document.querySelector('#todo-list').addEventListener('click', function(event) {
const item = event.target.closest('.todo-item');
if (!item) return;
if (event.target.matches('.delete-btn')) {
item.remove();
} else if (event.target.matches('.edit-btn')) {
startEdit(item);
}
});
İşte tek bir dinleyici tüm [[Döneticileri) ve [[Dönetici: 9) Aşağıdaki tıklamalar JavaScript üzerinden eklenecek ve bu hafıza kullanımını azaltacaktır (fewer dinleyicileri) ve dinamik DOM yönetimi.
Delegasyon için en iyi uygulamalar
- (İngilizce).
- DOM ağacının çok yüksek bir şekilde delemeyin - en yakın ortak ata ile sınırlayın.
- Çok büyük listelerle performans düşünün: 03.03.2012, hızlı, ancak tıklama başına binlerce çek ölçülebilir olabilir. Belirli bir seçici kullanın.
- Daha sonra ortadan kaldırmaya ihtiyaç duyan delege olayları için, eller referansını saklayın.
Loose Coupling için Özel Etkinlikler Oluşturun
Standart DOM olayları tıklama, anahtarlamalar, vb. Ancak uygulamanız, uygulamanız içinde yayıncı/saygılayıcı modeline izin vermek için ihtiyaç duyabilir. ”, [[BİLM/FONT=IUSNT=) veya JavaScript'sİLFLT:25) inşaor, kendi etkinlik tiplerinizi özel verilerle tanımlamanızı sağlar, uygulamanızda bir yayıncı/satış şekli etkinleştirebilirsiniz.
Bu yaklaşım modülerliği teşvik eder: diğer bileşenlerin yanıt vereceğini bilmeden olayları yayabilirsiniz. Aynı veya farklı elementlere eller ekleyebilirsin, hatta 03: 00'da bile).
Dispatching ve Özel Olaylara Duymak
// Emitter
const listElement = document.getElementById('my-list');
listElement.dispatchEvent(new CustomEvent('itemSelected', {
detail: { id: 42, name: 'Widget' },
bubbles: true
}));
// Listener
document.addEventListener('itemSelected', function(event) {
console.log('Selected item:', event.detail);
// Update UI, load details, etc.
});
Anahtar özellikleri:
- [FONT: 30) – geçmek istediğiniz herhangi bir veri.
- [FONT: 31) – helegenin işe yaramasını istiyorsanız doğru yola koyul.
- [FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=
Özel olaylar küresel devlet veya çağrı zincirlerine mükemmel bir alternatiftir. Modüllerinizi bağımsız ve yeniden faktörsüz tutmak için tutarlar.
Olayı dinlemek, Memory Leaks'i önlemek için
Genellikle modüler olay işlemenin bir yönü temizlenir. Daha sonra DOM'dan kaldırılan bir elemente eller koyarsanız, dinleyici hala elemente bir referans tutabilir, çöp toplamayı engelleyebilir.Bu sızıntı özellikle tek sayfa uygulamaları üzerinde performans gösterebilir.
Her zaman artık ihtiyaç duyulmadığında dinleyicileri ortadan kaldırır. eklemek için kullandığınız aynı işlev referansını kullanın.
function handleResize() { /* ... */ }
window.addEventListener('resize', handleResize);
// Later, when the component unmounts:
window.removeEventListener('resize', handleResize);
Eğer anonim bir işlev kullanıyorsanız, onu kaldıramazsınız. Bu nedenle, her zaman değişkende eller işlevi depolayın veya daha sonra referans olabilecek bir işlev ifadesini kullanın.
AbortController for Clean Removal
Modern tarayıcılar, bir kerede birden fazla olayı dinleyicileri iptal etmenizi sağlar. Bu özellikle de modülünüz birkaç ilgili dinleyiciyi yönetirken yararlıdır.
const controller = new AbortController();
const signal = controller.signal;
element.addEventListener('click', handler1, { signal });
element.addEventListener('mouseenter', handler2, { signal });
// Remove all listeners tied to this controller:
controller.abort();
Bu model, yedek parçadan fazla tutma için kazanılmış bir pakettir ve tüm modern tarayıcılarda desteklenmiştir.Eski ortamlar için, bir polifill veya bir manuel temizleyici işlevi düşünün.
Gelişmiş Desenler: Yüksek-Order Tutarlar ve Ortaware
Uygulamanız büyüdükçe, bu davranışları orijinal mantığı değiştirmeden daha yüksek sipariş fonksiyonlarını genişletebilirsiniz.
function withLogging(handler) {
return function(event) {
console.log(`Event ${event.type} triggered on`, event.target);
return handler.apply(this, arguments);
};
}
function withDebounce(handler, delay = 300) {
let timeoutId;
return function(event) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => handler.apply(this, arguments), delay);
};
}
const handleSearch = withLogging(withDebounce(function(event) {
// Perform search
}, 500));
searchInput.addEventListener('input', handleSearch);
Bu modüler kompozisyon her endişeyi ayrı tutar. Herhangi bir eller karşısında yeniden kullanılabilir ve bağımsız olarak da bu şekilde iyileşme mantığını kolayca test edebilirsiniz.
Dağıtım Tutarlar Dinamik olarak Data Attributes
modüler çerçevelerde popüler bir model, HTML'yi JavaScript'ten daha da fazla ikiye katlayın, DOM seçim mantığına dokunmadan esnek bağlayıcıya izin vermek için veri niteliklerini kullanmaktır.
Örnek HTML:
<button data-action="delete" data-id="101">Delete</button>
<button data-action="edit" data-id="101">Edit</button>
JavaScript ilkleştirici:
const actionMap = {
delete: handleDelete,
edit: handleEdit
};
document.querySelectorAll('[data-action]').forEach(btn => {
const action = btn.dataset.action;
const handler = actionMap[action];
if (handler) {
btn.addEventListener('click', handler);
}
});
Bu yaklaşım, sadece ESFLT:42'i güncelleyerek yeni eylemleri eklemenizi ve verilerin HTML'ye özelliklerini eklemenizi sağlar. Bu yaklaşım, dışsal ve izolasyonda test etmek kolaydır.
Performansı dikkate alınır: Throttling ve Debouncing
Düşük maliyetli operasyonlar yapan bir eller, jank'a neden olabilir.Dövme ve boksaj frekanslarında sınır kurmak için temel tekniklerdir.
- [FONT:0]Debounce[[[Dönetici: 1 ) - son olay yangınından beri belirtilen bir gecikmeden sonra eller idam eder.
- [FONT:0]Throttle[Dönetici 1] - Eller belirtilen aralıkta en iyi şekilde çalışır.
Bunları yeniden kullanılabilir yüksek sipariş fonksiyonları olarak uygulayın (daha önce gösterilen gibi) veya lodash gibi bir kütüphane kullanın. sıfır yeterlilik yaklaşımı için, aşağıdaki throttle işlevi iyi çalışır:
function throttle(fn, limit) {
let inThrottle;
return function(...args) {
if (!inThrottle) {
fn.apply(this, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
window.addEventListener('scroll', throttle(updateStickyHeader, 100));
ES Modüller ve İthalat / Dışportaj ile modülerize
Son olarak, gerçekten modüler kod elde etmek, ES modüllerden faydalanın. Özel etkinlik ellerlerinizi açın ve gerektiğinde onlara ithalat. Bu, küresel kapsamı temiz tutar ve ağaç yakalayıcılarına izin verir.
// handlers/click.js
export function handleMenuToggle(event) {
const menu = document.getElementById('nav-menu');
menu.classList.toggle('open');
}
// main.js
import { handleMenuToggle } from './handlers/click.js';
document.querySelector('#menu-btn').addEventListener('click', handleMenuToggle);
Ellerinizi özel veya alanla düzenlemeyi düşünün. Büyük projeler için, grupla ilgili eller tek bir modüle girer ve hepsini birbirine bağlayan bir başlangıç fonksiyonunu ihraç eder.Bu encapsulation, hangi olay dinleyicilerinin herhangi bir zamanda aktif olmasının kolay bir nedeni haline getirir.
Test Özel Olay Tutrs
Modüler olay eller test etmek için doğal olarak daha kolaydır, çünkü DOM'ye tamamen bağlı değildirler.Sen, aritme elementine eller takarak olayları simüle edebilirsiniz.
Basit bir iddia kullanarak örnek:
function testHandleSubmitClick() {
const form = document.createElement('form');
const button = document.createElement('button');
button.type = 'submit';
form.appendChild(button);
document.body.appendChild(form);
let called = false;
const originalHandler = handleSubmitClick;
// Override for test (or use spy)
handleSubmitClick = function(event) {
called = true;
event.preventDefault();
};
button.dispatchEvent(new MouseEvent('click', { bubbles: true }));
console.assert(called, 'Handler should be called');
}
Üretim için, Jest veya Vitest gibi test çerçevelerini test kütüphanesinden veya [[DÜŞTERÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
- [FONT:0] Birden çok dinleyiciyi ([Dönetici: 1 ) – Dinleyicinin zaten eklenmiş olup olmadığını kontrol edin. ModernurFLT:53) aynı işlev referansını tekrarlamaz, ancak tutarlı olun.
- [FONT:0]Memory kapatmalardan sızdırıyor [DÜDÜ: 1) Bir eller büyük nesneleri veya DOM düğümlerini yakalarsa, artık ihtiyaç duyulduğunda serbest bırakılmalarını sağlayın.
- [FONT:0] Pasif olayları görmezden gelmek [[Dönetici ve dokunma olayları için, ana konuyu engellemek için: [[<<<<<<<0.00T: 15).
- [FONT:0)Genellikle delegasyon) – Delegasyon güçlü ama olayların kaynağını maskeleyebilir. Özellikle olay düzeni önemli olduğunda bunu dikkatli bir şekilde kullanın.
Bütün Birlikte Oluşturun: Bir Modüler Handler Sistemi
Aşağıda, özel olayları birleştiren hafif, üretim hazır bir desen, delegasyon ve temizlenme. Herhangi bir çerçeve-agnostic proje için uygundur.
// eventManager.js
export class EventManager {
constructor(root = document) {
this.root = root;
this.handlers = new Map();
}
on(eventType, selector, handler) {
const delegateFn = (event) => {
const target = event.target.closest(selector);
if (target && this.root.contains(target)) {
handler.call(target, event, target);
}
};
// Store for removal
this.handlers.set(handler, { eventType, selector, delegateFn });
this.root.addEventListener(eventType, delegateFn);
}
off(handler) {
const record = this.handlers.get(handler);
if (record) {
this.root.removeEventListener(record.eventType, record.delegateFn);
this.handlers.delete(handler);
}
}
destroy() {
for (const [, record] of this.handlers) {
this.root.removeEventListener(record.eventType, record.delegateFn);
}
this.handlers.clear();
}
}
Kullanım:
const mgr = new EventManager(document.getElementById('app'));
function handleClick(event, el) {
console.log('Clicked:', el.dataset.id);
}
mgr.on('click', '[data-action="delete"]', handleClick);
// Later:
mgr.off(handleClick); // remove this specific handler
// Or:
mgr.destroy(); // remove all
Bu model delegasyon, kolay kaldırma ve modüler ithalat destekler. Etkinlik önceliklendirme, bir kez sadece seçenekler veya birsenlik işlemi ile uzatılabilir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Özel JavaScript olayı eller bir sözcü tercihinden daha fazlasıdır - burada tartışılan örnekler ve desenler herhangi bir proje için, büyük veya küçük bir proje için bir başlangıç noktası sağlar.
Etkinlik delegasyonu ve performansı hakkında daha fazla okuma için, DÜDÜSÜSTÜSİAD Etkinlik Sözleşmesi'ne ([Döneticileri ve ateksörüntüleri) atıfta bulunun.[0]MÜDÜDÜDÜDÜDÜDÜDÜDÜSTRİYE BÖLÜMÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
Küçük başlayın: Bir sıra dışı olay eller bir isim özel işlevine yeniden faktör, onu onlu bir şekilde ekleyin ve kodunuzun ne kadar net hale geldiğini gözlemleyin. O zaman delegasyon ve özel etkinliklerle ölçeklendirin.