Existuje Shadow DOM v React alebo len Virtual DOM?
sobes.tech AI
Odpoveď od AI
V React sa predvoleným nastavením sa používa Virtual DOM. Shadow DOM je samostatná technológia webových komponentov.
React používa Virtual DOM na zvýšenie výkonu aktualizácie používateľského rozhrania. Namiesto priamej manipulácie s reálnym DOM pri každej zmene stavu React vytvára ľahkú kópiu DOM v pamäti (Virtual DOM). Pri zmenách React porovnáva aktuálny Virtual DOM s predchádzajúcim, nájde minimálne rozdiely a aktualizuje iba potrebné časti reálneho DOM.
Shadow DOM je naopak súčasťou štandardu webových komponentov a je určený na inkapsuláciu štýlov a štruktúry vnútri vlastných prvkov. Vytvára samostatné DOM strom, izolované od hlavného dokumentu.
React možno použiť spolu s webovými komponentmi, ktoré používajú Shadow DOM, ale sám React predvolene nevytvára a nevyužíva Shadow DOM pre svoje komponenty.
// Príklad konceptu Virtual DOM v React
// Pri zmene stavu React porovnáva VDOM
// a aktualizuje iba zmenené časti DOM
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment() {
this.setState({ count: this.state.count + 1 });
// React aktualizuje iba textový uzol s číslom v reálnom DOM
}
render() {
return (
<div>
<p>Počítadlo: {this.state.count}</p> {/* Táto časť komponentu bude virtualizovaná */}
<button onClick={() => this.increment()}>Zvýšiť</button>
</div>
);
}
}
<!-- Príklad použitia Shadow DOM -->
<my-custom-element></my-custom-element>
<script>
customElements.define('my-custom-element', class extends HTMLElement {
constructor() {
super();
const shadowRoot = this.attachShadow({ mode: 'open' }); // Vytvorenie Shadow DOM
shadowRoot.innerHTML = `
<style>
p { color: blue; } /* Štýl je inkapsulovaný v Shadow DOM */
</style>
<p>Tento text je v Shadow DOM</p>
`;
}
});
</script>
Hlavné rozdiely:
| Charakteristika | Virtual DOM | Shadow DOM |
|---|---|---|
| Čo je? | Koncepcia/vzor v pamäti | Reálna technológia prehliadača |
| Účel | Optimalizácia aktualizácií UI | Inkapsulácia štýlov a štruktúry |
| Kde sa používa? | Frameworky/Knižnice (React, Vue) | Webové komponenty |
| Ako funguje? | Porovnávanie stromov v pamäti | Vytváranie izolovaného DOM stromu |