React や Vue などのフロントエンド ライブラリについて聞いたことがある場合は、仮想 DOM という用語に遭遇したことがあるかもしれません。仮想 DOM は、DOM の更新をより効率的に行うことで Web 開発のスピードアップに役立つ賢い概念です。
このガイドでは、一般的なコードのような手順を使用して、シンプルな仮想 DOM を最初から実装する方法を詳しく説明します。
仮想 DOM は、実際の DOM (Web ページの構造) の軽量のメモリ内表現にすぎません。実際の DOM を直接更新する (これには時間がかかります) 代わりに、最初に仮想 DOM に変更を加え、何が変更されたかを把握してから、更新する必要がある実際の DOM の部分のみを更新します。これにより時間を節約し、アプリを高速化します!
Web ページの構造をツリーとして想像してください。各要素 (
、
これが例です:
Virtual DOM Node: { type: 'div', props: { id: 'container' }, // attributes like id, class, etc. children: [ // children inside this element { type: 'p', // a <p> tag (paragraph) props: {}, children: ['Hello, world!'] // text inside the <p> tag } ] }
これは
が含まれます。 「Hello, world!」. というテキストを含む要素
仮想 DOM を作成したので、それをページ上の実際の HTML に変換する方法が必要です。
仮想 DOM ノードを受け取り、それを実際の HTML 要素に変換する render という関数を書いてみましょう。
function render(vNode) { // 1. Create a real element based on the Virtual DOM type (e.g., div, p). const element = document.createElement(vNode.type); // 2. Apply any attributes (props) like id, class, etc. for (const [key, value] of Object.entries(vNode.props)) { element.setAttribute(key, value); } // 3. Process the children of this Virtual DOM node. vNode.children.forEach(child => { if (typeof child === 'string') { // If the child is just text, create a text node. element.appendChild(document.createTextNode(child)); } else { // If the child is another Virtual DOM node, recursively render it. element.appendChild(render(child)); } }); return element; // Return the real DOM element. }
Web アプリで何かが変更されると (テキストや要素のスタイルなど)、新しい仮想 DOM が作成されます。ただし、実際の DOM を更新する前に、古い仮想 DOM と 新しい仮想 DOM を比較して、何が変更されたかを把握する必要があります。これは「差分」と呼ばれます。
2 つの仮想 DOM を比較する関数を作成しましょう:
Virtual DOM Node: { type: 'div', props: { id: 'container' }, // attributes like id, class, etc. children: [ // children inside this element { type: 'p', // a <p> tag (paragraph) props: {}, children: ['Hello, world!'] // text inside the <p> tag } ] }
に変更するなど)、置換対象としてマークします。
何が変更されたのかがわかったら、それらの変更を実際の DOM に適用する必要があります。このプロセスをパッチ適用と呼びます。
パッチ機能は次のようになります:
function render(vNode) { // 1. Create a real element based on the Virtual DOM type (e.g., div, p). const element = document.createElement(vNode.type); // 2. Apply any attributes (props) like id, class, etc. for (const [key, value] of Object.entries(vNode.props)) { element.setAttribute(key, value); } // 3. Process the children of this Virtual DOM node. vNode.children.forEach(child => { if (typeof child === 'string') { // If the child is just text, create a text node. element.appendChild(document.createTextNode(child)); } else { // If the child is another Virtual DOM node, recursively render it. element.appendChild(render(child)); } }); return element; // Return the real DOM element. }キー操作:
仮想 DOM は、実際の DOM への不必要な変更を減らすことで、ユーザー インターフェイスの更新を高速化する強力なツールです。仮想 DOM を実装することで、Web アプリが要素を更新およびレンダリングする方法を最適化し、より高速でスムーズなユーザー エクスペリエンスを実現できます。
これは Virtual DOM 概念の基本的な実装ですが、React などのフレームワークがそれをどのように利用するかを理解するための基礎ができました!
以上が仮想 DOM を最初から設計する: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。