વેબ કમ્પોનન્ટ લાઈફસાઈકલનું ઊંડાણપૂર્વકનું વિશ્લેષણ, જેમાં કસ્ટમ એલિમેન્ટ બનાવટ, જોડાણ, એટ્રિબ્યુટ ફેરફારો અને ડિસ્કનેક્શન આવરી લેવાયું છે. આધુનિક વેબ એપ્લિકેશન્સ માટે મજબૂત અને પુનઃઉપયોગી કમ્પોનન્ટ બનાવતા શીખો.
વેબ કમ્પોનન્ટ લાઈફસાઈકલ: કસ્ટમ એલિમેન્ટ બનાવટ અને સંચાલનમાં નિપુણતા
વેબ કમ્પોનન્ટ્સ આધુનિક વેબ ડેવલપમેન્ટમાં પુનઃઉપયોગી અને એન્કેપ્સ્યુલેટેડ UI એલિમેન્ટ્સ બનાવવા માટે એક શક્તિશાળી સાધન છે. વેબ કમ્પોનન્ટની લાઈફસાઈકલને સમજવી મજબૂત, જાળવણી કરી શકાય તેવી અને કાર્યક્ષમ એપ્લિકેશન્સ બનાવવા માટે નિર્ણાયક છે. આ વ્યાપક માર્ગદર્શિકા વેબ કમ્પોનન્ટ લાઈફસાઈકલના વિવિધ તબક્કાઓનું અન્વેષણ કરે છે, જેમાં તમને કસ્ટમ એલિમેન્ટ બનાવટ અને સંચાલનમાં નિપુણતા મેળવવામાં મદદ કરવા માટે વિગતવાર સ્પષ્ટતાઓ અને વ્યવહારુ ઉદાહરણો પ્રદાન કરવામાં આવ્યા છે.
વેબ કમ્પોનન્ટ્સ શું છે?
વેબ કમ્પોનન્ટ્સ વેબ પ્લેટફોર્મ APIs નો સમૂહ છે જે તમને એન્કેપ્સ્યુલેટેડ સ્ટાઇલિંગ અને વર્તન સાથે પુનઃઉપયોગી કસ્ટમ HTML એલિમેન્ટ્સ બનાવવાની મંજૂરી આપે છે. તેમાં ત્રણ મુખ્ય ટેકનોલોજીઓનો સમાવેશ થાય છે:
- કસ્ટમ એલિમેન્ટ્સ: તમને તમારા પોતાના HTML ટૅગ્સ અને તેની સાથે સંકળાયેલ જાવાસ્ક્રિપ્ટ લોજિકને વ્યાખ્યાયિત કરવા સક્ષમ બનાવે છે.
- શેડો DOM: કમ્પોનન્ટ માટે એક અલગ DOM ટ્રી બનાવીને એન્કેપ્સ્યુલેશન પ્રદાન કરે છે, જે તેને ગ્લોબલ ડોક્યુમેન્ટની સ્ટાઇલ્સ અને સ્ક્રિપ્ટ્સથી બચાવે છે.
- HTML ટેમ્પ્લેટ્સ: તમને પુનઃઉપયોગી HTML સ્નિપેટ્સ વ્યાખ્યાયિત કરવાની મંજૂરી આપે છે જેને DOM માં અસરકારક રીતે ક્લોન અને દાખલ કરી શકાય છે.
વેબ કમ્પોનન્ટ્સ કોડની પુનઃઉપયોગિતાને પ્રોત્સાહન આપે છે, જાળવણીક્ષમતામાં સુધારો કરે છે, અને જટિલ યુઝર ઇન્ટરફેસને મોડ્યુલર અને સંગઠિત રીતે બનાવવાની મંજૂરી આપે છે. તે બધા મુખ્ય બ્રાઉઝર્સ દ્વારા સમર્થિત છે અને કોઈપણ જાવાસ્ક્રિપ્ટ ફ્રેમવર્ક અથવા લાઇબ્રેરી સાથે, અથવા કોઈપણ ફ્રેમવર્ક વગર પણ વાપરી શકાય છે.
વેબ કમ્પોનન્ટ લાઈફસાઈકલ
વેબ કમ્પોનન્ટ લાઈફસાઈકલ એક કસ્ટમ એલિમેન્ટની બનાવટથી લઈને DOM માંથી તેને દૂર કરવા સુધીના વિવિધ તબક્કાઓને વ્યાખ્યાયિત કરે છે. આ તબક્કાઓને સમજવાથી તમે યોગ્ય સમયે ચોક્કસ ક્રિયાઓ કરી શકો છો, જે સુનિશ્ચિત કરે છે કે તમારો કમ્પોનન્ટ યોગ્ય રીતે અને અસરકારક રીતે વર્તે છે.
મુખ્ય લાઈફસાઈકલ મેથડ્સ છે:
- constructor(): જ્યારે એલિમેન્ટ બનાવવામાં આવે અથવા અપગ્રેડ કરવામાં આવે ત્યારે કન્સ્ટ્રક્ટરને કૉલ કરવામાં આવે છે. આ તે સ્થાન છે જ્યાં તમે કમ્પોનન્ટની સ્થિતિને પ્રારંભ કરો છો અને તેની શેડો DOM (જો જરૂરી હોય તો) બનાવો છો.
- connectedCallback(): દરેક વખતે જ્યારે કસ્ટમ એલિમેન્ટ ડોક્યુમેન્ટના DOM સાથે જોડાય છે ત્યારે આને કૉલ કરવામાં આવે છે. ડેટા મેળવવા, ઇવેન્ટ લિસનર્સ ઉમેરવા, અથવા કમ્પોનન્ટની પ્રારંભિક સામગ્રી રેન્ડર કરવા જેવા સેટઅપ કાર્યો કરવા માટે આ એક સારી જગ્યા છે.
- disconnectedCallback(): દરેક વખતે જ્યારે કસ્ટમ એલિમેન્ટ ડોક્યુમેન્ટના DOM માંથી ડિસ્કનેક્ટ થાય છે ત્યારે આને કૉલ કરવામાં આવે છે. મેમરી લીકને રોકવા માટે, અહીં તમારે કોઈપણ સંસાધનોને સાફ કરવા જોઈએ, જેમ કે ઇવેન્ટ લિસનર્સ દૂર કરવા અથવા ટાઈમર્સ રદ કરવા.
- attributeChangedCallback(name, oldValue, newValue): દરેક વખતે જ્યારે કસ્ટમ એલિમેન્ટના એટ્રિબ્યુટ્સમાંથી કોઈ એક ઉમેરવામાં, દૂર કરવામાં, અપડેટ કરવામાં અથવા બદલવામાં આવે ત્યારે આને કૉલ કરવામાં આવે છે. આ તમને કમ્પોનન્ટના એટ્રિબ્યુટ્સમાં થતા ફેરફારોને પ્રતિસાદ આપવા અને તેના વર્તનને તે મુજબ અપડેટ કરવાની મંજૂરી આપે છે. તમારે
observedAttributes
સ્ટેટિક ગેટરનો ઉપયોગ કરીને કયા એટ્રિબ્યુટ્સનું નિરીક્ષણ કરવા માંગો છો તે સ્પષ્ટ કરવું પડશે. - adoptedCallback(): દરેક વખતે જ્યારે કસ્ટમ એલિમેન્ટને નવા ડોક્યુમેન્ટમાં ખસેડવામાં આવે ત્યારે આને કૉલ કરવામાં આવે છે. આ iframes સાથે કામ કરતી વખતે અથવા એપ્લિકેશનના વિવિધ ભાગો વચ્ચે એલિમેન્ટ્સને ખસેડતી વખતે સંબંધિત છે.
દરેક લાઈફસાઈકલ મેથડમાં ઊંડાણપૂર્વક નજર
1. constructor()
કન્સ્ટ્રક્ટર એ પ્રથમ મેથડ છે જેને તમારા કસ્ટમ એલિમેન્ટનું નવું ઉદાહરણ બનાવતી વખતે કૉલ કરવામાં આવે છે. આ આદર્શ સ્થાન છે:
- કમ્પોનન્ટની આંતરિક સ્થિતિને પ્રારંભ કરવા માટે.
this.attachShadow({ mode: 'open' })
અથવાthis.attachShadow({ mode: 'closed' })
નો ઉપયોગ કરીને શેડો DOM બનાવવા માટે.mode
નક્કી કરે છે કે શેડો DOM કમ્પોનન્ટની બહાર જાવાસ્ક્રિપ્ટમાંથી એક્સેસ કરી શકાય છે (open
) કે નહીં (closed
). સરળ ડિબગિંગ માટે સામાન્ય રીતેopen
નો ઉપયોગ કરવાની ભલામણ કરવામાં આવે છે.- ઇવેન્ટ હેન્ડલર મેથડ્સને કમ્પોનન્ટ ઉદાહરણ સાથે બાંધવા (
this.methodName = this.methodName.bind(this)
નો ઉપયોગ કરીને) જેથી હેન્ડલરની અંદરthis
કમ્પોનન્ટ ઉદાહરણનો સંદર્ભ આપે.
કન્સ્ટ્રક્ટર માટે મહત્વપૂર્ણ વિચારણાઓ:
- તમારે કન્સ્ટ્રક્ટરમાં કોઈપણ DOM મેનીપ્યુલેશન ન કરવું જોઈએ. એલિમેન્ટ હજી સુધી DOM સાથે સંપૂર્ણપણે જોડાયેલ નથી, અને તેને સંશોધિત કરવાનો પ્રયાસ અણધાર્યા વર્તન તરફ દોરી શકે છે. DOM મેનીપ્યુલેશન માટે
connectedCallback
નો ઉપયોગ કરો. - કન્સ્ટ્રક્ટરમાં એટ્રિબ્યુટ્સનો ઉપયોગ ટાળો. એટ્રિબ્યુટ્સ હજી ઉપલબ્ધ ન હોઈ શકે. તેના બદલે
connectedCallback
અથવાattributeChangedCallback
નો ઉપયોગ કરો. - પહેલા
super()
કૉલ કરો. જો તમે બીજા ક્લાસ (સામાન્ય રીતેHTMLElement
) થી વિસ્તરણ કરો છો તો આ ફરજિયાત છે.
ઉદાહરણ:
class MyCustomElement extends HTMLElement {
constructor() {
super();
// શેડો રૂટ બનાવો
this.shadow = this.attachShadow({mode: 'open'});
this.message = "Hello, world!";
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
alert(this.message);
}
}
2. connectedCallback()
જ્યારે કસ્ટમ એલિમેન્ટ ડોક્યુમેન્ટના DOM સાથે જોડાય છે ત્યારે connectedCallback
ને કૉલ કરવામાં આવે છે. આ પ્રાથમિક સ્થાન છે:
- API માંથી ડેટા મેળવવા માટે.
- કમ્પોનન્ટ અથવા તેના શેડો DOM માં ઇવેન્ટ લિસનર્સ ઉમેરવા માટે.
- કમ્પોનન્ટની પ્રારંભિક સામગ્રીને શેડો DOM માં રેન્ડર કરવા માટે.
- જો કન્સ્ટ્રક્ટરમાં તાત્કાલિક નિરીક્ષણ શક્ય ન હોય તો એટ્રિબ્યુટ ફેરફારોનું નિરીક્ષણ કરવા માટે.
ઉદાહરણ:
class MyCustomElement extends HTMLElement {
// ... constructor ...
connectedCallback() {
// બટન એલિમેન્ટ બનાવો
const button = document.createElement('button');
button.textContent = 'Click me!';
button.addEventListener('click', this.handleClick);
this.shadow.appendChild(button);
// ડેટા મેળવો (ઉદાહરણ)
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
this.data = data;
this.render(); // UI અપડેટ કરવા માટે રેન્ડર મેથડને કૉલ કરો
});
}
render() {
// ડેટાના આધારે શેડો DOM અપડેટ કરો
const dataElement = document.createElement('p');
dataElement.textContent = JSON.stringify(this.data);
this.shadow.appendChild(dataElement);
}
handleClick() {
alert("Button clicked!");
}
}
3. disconnectedCallback()
જ્યારે કસ્ટમ એલિમેન્ટ ડોક્યુમેન્ટના DOM માંથી ડિસ્કનેક્ટ થાય છે ત્યારે disconnectedCallback
ને કૉલ કરવામાં આવે છે. આ આના માટે નિર્ણાયક છે:
- મેમરી લીકને રોકવા માટે ઇવેન્ટ લિસનર્સ દૂર કરવા.
- કોઈપણ ટાઈમર્સ અથવા અંતરાલોને રદ કરવા.
- કમ્પોનન્ટ દ્વારા રોકાયેલા કોઈપણ સંસાધનોને મુક્ત કરવા.
ઉદાહરણ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback ...
disconnectedCallback() {
// ઇવેન્ટ લિસનર દૂર કરો
this.shadow.querySelector('button').removeEventListener('click', this.handleClick);
// કોઈપણ ટાઈમર્સ રદ કરો (ઉદાહરણ)
if (this.timer) {
clearInterval(this.timer);
}
console.log('Component disconnected from the DOM.');
}
}
4. attributeChangedCallback(name, oldValue, newValue)
attributeChangedCallback
ને ત્યારે કૉલ કરવામાં આવે છે જ્યારે કસ્ટમ એલિમેન્ટનું એટ્રિબ્યુટ બદલાય છે, પરંતુ ફક્ત observedAttributes
સ્ટેટિક ગેટરમાં સૂચિબદ્ધ એટ્રિબ્યુટ્સ માટે. આ મેથડ આના માટે આવશ્યક છે:
- એટ્રિબ્યુટ મૂલ્યોમાં ફેરફારો પર પ્રતિક્રિયા આપવા અને કમ્પોનન્ટના વર્તન અથવા દેખાવને અપડેટ કરવા માટે.
- એટ્રિબ્યુટ મૂલ્યોને માન્ય કરવા માટે.
મુખ્ય પાસાઓ:
- તમારે ફરજિયાતપણે
observedAttributes
નામનો સ્ટેટિક ગેટર વ્યાખ્યાયિત કરવો પડશે જે તમે નિરીક્ષણ કરવા માંગો છો તે એટ્રિબ્યુટ નામોની એરે પરત કરે. attributeChangedCallback
ફક્તobservedAttributes
માં સૂચિબદ્ધ એટ્રિબ્યુટ્સ માટે જ કૉલ કરવામાં આવશે.- મેથડ ત્રણ દલીલો મેળવે છે: બદલાયેલ એટ્રિબ્યુટનું
name
,oldValue
અનેnewValue
. - જો એટ્રિબ્યુટ નવું ઉમેરવામાં આવ્યું હોય તો
oldValue
null
હશે.
ઉદાહરણ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback, disconnectedCallback ...
static get observedAttributes() {
return ['message', 'data-count']; // 'message' અને 'data-count' એટ્રિબ્યુટ્સનું નિરીક્ષણ કરો
}
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'message') {
this.message = newValue; // આંતરિક સ્થિતિ અપડેટ કરો
this.renderMessage(); // સંદેશ ફરીથી રેન્ડર કરો
} else if (name === 'data-count') {
const count = parseInt(newValue, 10);
if (!isNaN(count)) {
this.count = count; // આંતરિક ગણતરી અપડેટ કરો
this.renderCount(); // ગણતરી ફરીથી રેન્ડર કરો
} else {
console.error('Invalid data-count attribute value:', newValue);
}
}
}
renderMessage() {
// શેડો DOM માં સંદેશ પ્રદર્શન અપડેટ કરો
let messageElement = this.shadow.querySelector('.message');
if (!messageElement) {
messageElement = document.createElement('p');
messageElement.classList.add('message');
this.shadow.appendChild(messageElement);
}
messageElement.textContent = this.message;
}
renderCount(){
let countElement = this.shadow.querySelector('.count');
if(!countElement){
countElement = document.createElement('p');
countElement.classList.add('count');
this.shadow.appendChild(countElement);
}
countElement.textContent = `Count: ${this.count}`;
}
}
attributeChangedCallback નો અસરકારક રીતે ઉપયોગ:
- ઇનપુટ માન્ય કરો: ડેટાની અખંડિતતા સુનિશ્ચિત કરવા માટે નવા મૂલ્યને માન્ય કરવા માટે કૉલબેકનો ઉપયોગ કરો.
- અપડેટ્સ ડિબાઉન્સ કરો: વધુ પડતા રિ-રેન્ડરિંગને ટાળવા માટે, ગણતરીની દ્રષ્ટિએ ખર્ચાળ અપડેટ્સ માટે એટ્રિબ્યુટ ચેન્જ હેન્ડલરને ડિબાઉન્સ કરવાનું વિચારો.
- વિકલ્પોનો વિચાર કરો: જટિલ ડેટા માટે, એટ્રિબ્યુટ્સને બદલે પ્રોપર્ટીઝનો ઉપયોગ કરવાનું વિચારો અને પ્રોપર્ટી સેટરની અંદર સીધા ફેરફારોને હેન્ડલ કરો.
5. adoptedCallback()
જ્યારે કસ્ટમ એલિમેન્ટને નવા ડોક્યુમેન્ટમાં ખસેડવામાં આવે છે ત્યારે adoptedCallback
ને કૉલ કરવામાં આવે છે (દા.ત., જ્યારે એક iframe થી બીજામાં ખસેડવામાં આવે). આ ઓછી ઉપયોગમાં લેવાતી લાઈફસાઈકલ મેથડ છે, પરંતુ ડોક્યુમેન્ટ સંદર્ભો સાથેના વધુ જટિલ દૃશ્યોમાં કામ કરતી વખતે તેના વિશે જાગૃત રહેવું મહત્વપૂર્ણ છે.
ઉદાહરણ:
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback, disconnectedCallback, attributeChangedCallback ...
adoptedCallback() {
console.log('Component adopted into a new document.');
// જ્યારે કમ્પોનન્ટને નવા ડોક્યુમેન્ટમાં ખસેડવામાં આવે ત્યારે કોઈપણ જરૂરી ગોઠવણો કરો
// આમાં બાહ્ય સંસાધનોના સંદર્ભોને અપડેટ કરવું અથવા જોડાણો ફરીથી સ્થાપિત કરવું શામેલ હોઈ શકે છે.
}
}
કસ્ટમ એલિમેન્ટને વ્યાખ્યાયિત કરવું
એકવાર તમે તમારા કસ્ટમ એલિમેન્ટ ક્લાસને વ્યાખ્યાયિત કરી લો, પછી તમારે તેને બ્રાઉઝર સાથે customElements.define()
નો ઉપયોગ કરીને રજીસ્ટર કરવાની જરૂર છે:
customElements.define('my-custom-element', MyCustomElement);
પ્રથમ દલીલ તમારા કસ્ટમ એલિમેન્ટ માટે ટૅગ નામ છે (દા.ત., 'my-custom-element'
). સ્ટાન્ડર્ડ HTML એલિમેન્ટ્સ સાથેના સંઘર્ષને ટાળવા માટે ટૅગ નામમાં અચૂક હાઇફન (-
) હોવું જોઈએ.
બીજી દલીલ એ ક્લાસ છે જે તમારા કસ્ટમ એલિમેન્ટના વર્તનને વ્યાખ્યાયિત કરે છે (દા.ત., MyCustomElement
).
કસ્ટમ એલિમેન્ટને વ્યાખ્યાયિત કર્યા પછી, તમે તેને તમારા HTML માં અન્ય કોઈપણ HTML એલિમેન્ટની જેમ ઉપયોગ કરી શકો છો:
<my-custom-element message="Hello from attribute!" data-count="10"></my-custom-element>
વેબ કમ્પોનન્ટ લાઈફસાઈકલ સંચાલન માટે શ્રેષ્ઠ પ્રથાઓ
- કન્સ્ટ્રક્ટરને હલકો રાખો: કન્સ્ટ્રક્ટરમાં DOM મેનીપ્યુલેશન અથવા જટિલ ગણતરીઓ કરવાનું ટાળો. આ કાર્યો માટે
connectedCallback
નો ઉપયોગ કરો. disconnectedCallback
માં સંસાધનો સાફ કરો: મેમરી લીકને રોકવા માટે હંમેશા ઇવેન્ટ લિસનર્સ દૂર કરો, ટાઈમર્સ રદ કરો અનેdisconnectedCallback
માં સંસાધનો મુક્ત કરો.observedAttributes
નો સમજદારીપૂર્વક ઉપયોગ કરો: ફક્ત તે જ એટ્રિબ્યુટ્સનું નિરીક્ષણ કરો જેના પર તમારે ખરેખર પ્રતિક્રિયા આપવાની જરૂર છે. બિનજરૂરી એટ્રિબ્યુટ્સનું નિરીક્ષણ પ્રદર્શનને અસર કરી શકે છે.- રેન્ડરિંગ લાઇબ્રેરીનો ઉપયોગ કરવાનું વિચારો: જટિલ UI અપડેટ્સ માટે, પ્રક્રિયાને સરળ બનાવવા અને પ્રદર્શન સુધારવા માટે LitElement અથવા uhtml જેવી રેન્ડરિંગ લાઇબ્રેરીનો ઉપયોગ કરવાનું વિચારો.
- તમારા કમ્પોનન્ટ્સનું સંપૂર્ણ પરીક્ષણ કરો: તમારા કમ્પોનન્ટ્સ તેમની લાઈફસાઈકલ દરમિયાન યોગ્ય રીતે વર્તે છે તે સુનિશ્ચિત કરવા માટે યુનિટ ટેસ્ટ લખો.
ઉદાહરણ: એક સરળ કાઉન્ટર કમ્પોનન્ટ
ચાલો એક સરળ કાઉન્ટર કમ્પોનન્ટ બનાવીએ જે વેબ કમ્પોનન્ટ લાઈફસાઈકલના ઉપયોગનું પ્રદર્શન કરે છે:
class CounterComponent extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.count = 0;
this.increment = this.increment.bind(this);
}
connectedCallback() {
this.render();
this.shadow.querySelector('button').addEventListener('click', this.increment);
}
disconnectedCallback() {
this.shadow.querySelector('button').removeEventListener('click', this.increment);
}
increment() {
this.count++;
this.render();
}
render() {
this.shadow.innerHTML = `
<p>Count: ${this.count}</p>
<button>Increment</button>
`;
}
}
customElements.define('counter-component', CounterComponent);
આ કમ્પોનન્ટ એક આંતરિક count
વેરિયેબલ જાળવી રાખે છે અને બટન પર ક્લિક કરવામાં આવે ત્યારે ડિસ્પ્લે અપડેટ કરે છે. connectedCallback
ઇવેન્ટ લિસનર ઉમેરે છે, અને disconnectedCallback
તેને દૂર કરે છે.
એડવાન્સ્ડ વેબ કમ્પોનન્ટ ટેકનિક
1. એટ્રિબ્યુટ્સને બદલે પ્રોપર્ટીઝનો ઉપયોગ
જ્યારે સરળ ડેટા માટે એટ્રિબ્યુટ્સ ઉપયોગી છે, ત્યારે પ્રોપર્ટીઝ વધુ સુગમતા અને ટાઇપ સલામતી પ્રદાન કરે છે. તમે તમારા કસ્ટમ એલિમેન્ટ પર પ્રોપર્ટીઝ વ્યાખ્યાયિત કરી શકો છો અને ગેટર્સ અને સેટર્સનો ઉપયોગ કરીને તેમને કેવી રીતે એક્સેસ અને સંશોધિત કરવામાં આવે છે તે નિયંત્રિત કરી શકો છો.
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this._data = null; // ડેટા સ્ટોર કરવા માટે પ્રાઇવેટ પ્રોપર્ટીનો ઉપયોગ કરો
}
get data() {
return this._data;
}
set data(value) {
this._data = value;
this.renderData(); // જ્યારે ડેટા બદલાય ત્યારે કમ્પોનન્ટને ફરીથી રેન્ડર કરો
}
connectedCallback() {
// પ્રારંભિક રેન્ડરિંગ
this.renderData();
}
renderData() {
// ડેટાના આધારે શેડો DOM અપડેટ કરો
this.shadow.innerHTML = `<p>Data: ${JSON.stringify(this._data)}</p>`;
}
}
customElements.define('my-data-element', MyCustomElement);
ત્યારબાદ તમે data
પ્રોપર્ટીને સીધી જાવાસ્ક્રિપ્ટમાં સેટ કરી શકો છો:
const element = document.querySelector('my-data-element');
element.data = { name: 'John Doe', age: 30 };
2. સંદેશાવ્યવહાર માટે ઇવેન્ટ્સનો ઉપયોગ
કસ્ટમ ઇવેન્ટ્સ વેબ કમ્પોનન્ટ્સને એકબીજા સાથે અને બહારની દુનિયા સાથે વાતચીત કરવા માટે એક શક્તિશાળી માર્ગ છે. તમે તમારા કમ્પોનન્ટમાંથી કસ્ટમ ઇવેન્ટ્સ ડિસ્પેચ કરી શકો છો અને તમારી એપ્લિકેશનના અન્ય ભાગોમાં તેને સાંભળી શકો છો.
class MyCustomElement extends HTMLElement {
// ... constructor, connectedCallback ...
dispatchCustomEvent() {
const event = new CustomEvent('my-custom-event', {
detail: { message: 'Hello from the component!' },
bubbles: true, // ઇવેન્ટને DOM ટ્રી ઉપર બબલ થવા દો
composed: true // ઇવેન્ટને શેડો DOM સીમા પાર કરવા દો
});
this.dispatchEvent(event);
}
}
customElements.define('my-event-element', MyCustomElement);
// પેરેન્ટ ડોક્યુમેન્ટમાં કસ્ટમ ઇવેન્ટ સાંભળો
document.addEventListener('my-custom-event', (event) => {
console.log('Custom event received:', event.detail.message);
});
3. શેડો DOM સ્ટાઇલિંગ
શેડો DOM સ્ટાઇલ એન્કેપ્સ્યુલેશન પ્રદાન કરે છે, જે સ્ટાઇલ્સને કમ્પોનન્ટની અંદર કે બહાર લીક થતી અટકાવે છે. તમે તમારા વેબ કમ્પોનન્ટ્સને શેડો DOM ની અંદર CSS નો ઉપયોગ કરીને સ્ટાઇલ કરી શકો છો.
ઇનલાઇન સ્ટાઇલ્સ:
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.shadow.innerHTML = `
<style>
p {
color: blue;
}
</style>
<p>This is a styled paragraph.</p>
`;
}
}
બાહ્ય સ્ટાઇલશીટ્સ:
તમે શેડો DOM માં બાહ્ય સ્ટાઇલશીટ્સ પણ લોડ કરી શકો છો:
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({ mode: 'open' });
const linkElem = document.createElement('link');
linkElem.setAttribute('rel', 'stylesheet');
linkElem.setAttribute('href', 'my-component.css');
this.shadow.appendChild(linkElem);
this.shadow.innerHTML += '<p>This is a styled paragraph.</p>';
}
}
નિષ્કર્ષ
આધુનિક વેબ એપ્લિકેશન્સ માટે મજબૂત અને પુનઃઉપયોગી કમ્પોનન્ટ્સ બનાવવા માટે વેબ કમ્પોનન્ટ લાઈફસાઈકલમાં નિપુણતા મેળવવી આવશ્યક છે. વિવિધ લાઈફસાઈકલ મેથડ્સને સમજીને અને શ્રેષ્ઠ પ્રથાઓનો ઉપયોગ કરીને, તમે એવા કમ્પોનન્ટ્સ બનાવી શકો છો જે જાળવવા માટે સરળ, કાર્યક્ષમ અને તમારી એપ્લિકેશનના અન્ય ભાગો સાથે સરળતાથી સંકલિત થઈ શકે. આ માર્ગદર્શિકાએ વેબ કમ્પોનન્ટ લાઈફસાઈકલનું વ્યાપક વિહંગાવલોકન પ્રદાન કર્યું, જેમાં વિગતવાર સ્પષ્ટતાઓ, વ્યવહારુ ઉદાહરણો અને અદ્યતન તકનીકો શામેલ છે. વેબ કમ્પોનન્ટ્સની શક્તિને અપનાવો અને મોડ્યુલર, જાળવણીક્ષમ અને સ્કેલેબલ વેબ એપ્લિકેશન્સ બનાવો.
વધુ શીખવા માટે:
- MDN વેબ ડૉક્સ: વેબ કમ્પોનન્ટ્સ અને કસ્ટમ એલિમેન્ટ્સ પર વ્યાપક દસ્તાવેજીકરણ.
- WebComponents.org: વેબ કમ્પોનન્ટ ડેવલપર્સ માટે સમુદાય દ્વારા સંચાલિત સંસાધન.
- LitElement: ઝડપી, હલકા વેબ કમ્પોનન્ટ્સ બનાવવા માટે એક સરળ બેઝ ક્લાસ.