event delegation का मतलब है किसी साझा पूर्वज पर एक listener लगाना और event.target से यह पता करना कि किस वंशज पर बात हुई। यह इसलिए काम करता है कि ज़्यादातर events target से ऊपर उसके पूर्वजों तक bubble करते हैं। इसे उन lists के लिए इस्तेमाल करें जो अक्सर बदलती हैं या बड़ी हैं, क्योंकि आप सैकड़ों listeners लगाने और हटाने से बच जाते हैं। जो events bubble नहीं करते, जैसे focus, blur और ज़्यादातर media events, उनके लिए इसे छोड़ दें।
इंटरव्यूअर यह क्यों पूछते हैं
यह झटपट जांच है कि आप capture और bubble चरण समझते हैं या बस याद से addEventListener लिखते हैं। इंटरव्यूअर memory की सफाई भी टटोल रहा है: जिन उम्मीदवारों ने किसी single page app में लीक होते listeners डिबग किए हैं वे जानते हैं कि delegation क्यों मायने रखती है। फॉलो अप आमतौर पर उन events की तरफ जाते हैं जो bubble नहीं करते, stopPropagation के गलत इस्तेमाल की तरफ, और यह कि frameworks इसी के ऊपर अपनी synthetic delegation कैसे बनाते हैं।
अपना जवाब कैसे स्ट्रक्चर करें
- bubbling और event.target का इस्तेमाल करके इसे एक लाइन में परिभाषित करें।
- ठोस फायदा बताएं: कम listeners, बाद में जोड़े गए elements पर भी काम।
- अपवाद बताएं, उन events समेत जो bubble नहीं करते।
- चेताएं कि stopPropagation ऊपर की delegation तोड़ देता है।
उदाहरण जवाब
हर row पर click listener लगाने की जगह मैं container पर एक लगाता हूं और event.target पढ़ता हूं, फिर closest से ऊपर चलकर वह row ढूंढता हूं जिसकी मुझे परवाह है। यह इसलिए चलता है कि click जिस चीज़ पर सच में हुआ वहां से उसके पूर्वजों तक bubble करता है, तो container अपने नीचे सब कुछ देख लेता है। दो फायदे हैं: मैं सैकड़ों listeners बना और मिटा नहीं रहा, और बाद में जुड़ने वाली rows बिना दोबारा binding किए काम करती हैं। पेच बताने लायक हैं: focus और blur bubble नहीं करते, तो उनके लिए मैं focusin और focusout इस्तेमाल करता हूं, और अगर target तथा मेरे container के बीच का कोई कोड stopPropagation कर दे तो मेरा handler चुपचाप चलना बंद कर देता है, और वह सच में चिढ़ाने वाला bug है। मुझे यह ज़्यादातर एक table में मिला जहां किसी अंदरूनी component ने अपना menu बंद करने के लिए propagation रोका और चुपचाप row selection मार दी। आजकल मुझे delegation आमतौर पर framework से मुफ्त मिल जाती है, पर बड़ी virtualized lists और framework के पेड़ के बाहर render होने वाली चीज़ों के लिए मैं अब भी इसे सीधे इस्तेमाल करता हूं।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- कौन से आम events bubble नहीं करते, और उनकी जगह आप क्या इस्तेमाल करते हैं?
- row के अंदर किसी nested element पर click को कैसे संभालेंगे?
- stopPropagation कब सही फैसला होता है और कब बदबू?
फ्रंटएंड डेवलपर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें