Vue3におけるキーの役割と動作原理についての簡単な説明

Vue3におけるキーの役割と動作原理についての簡単な説明

このキー属性の機能は何ですか?まずは公式の説明を見てみましょう。

  • kekey 属性は主に、新しいノードと古いノードを比較するときに Vnode を識別するために、Vue の仮想 DOM diff アルゴリズムで使用されます。
  • キーを使用しない場合、Vue は動的要素を最小限に抑え、可能な限り同じタイプの要素を変更/再利用しようとするアルゴリズムを使用します。
  • キーを使用すると、キーの変更に基づいて要素の順序が並べ替えられ、キーに存在しない要素が削除/破棄されます。

VNode についての私の理解を簡単に述べたいと思います。

  • VNode の正式名称は Virtual Node で、仮想ノードです。
  • Vnode の本質は JavaScript オブジェクトです。
  • 実際、Vue では、コンポーネントと個々の要素の両方が VNode として表されます。

例えば:

<div class="title" style="color: red;">こんにちは世界</div>
// 実際には Vue では次のように表現されます:
定数VNode = {
    タイプ: "div",
    小道具: {
        クラス: "タイトル",
        スタイル: {
            色: 「赤」        
        }    
    },
    children: "Hello World" // div に他のタグが含まれている場合は、同様に子に変換されます}

どのような状況で f の挿入が最も効率的でしょうか?

アイデア:

  • 一度再レンダリングする(パフォーマンスを大幅に消費します)
  • 以前の VNode は変更されず、挿入位置から再レンダリングされます (パフォーマンスが大幅に消費されます)
  • すべての VNnode が再レンダリングされ、新しく追加された VNode のみを挿入する必要があります (最高のパフォーマンス)

結論:最高のパフォーマンスを得るには、新しい VNode と古い VNode にキーを設定し、古い VNode と新しい VNode をキー値で比較して、追加または削除する必要がある VNode を見つける必要があります。他の VNode は可能な限り変更しないでください。新しい VNode と古い VNode を比較するプロセスが、diff アルゴリズムです。

Vue は実際にはキーがある場合とない場合の 2 つの異なるメソッドを呼び出します。ソース コードを見てみましょう: (packages\runtime-core\src\renderer)

キーの場合は、patchKeyedChildren メソッドを実行します。

キー値がない場合は、patchUnkeyedChildren メソッドを実行します。

注意: キー値がない場合、リストが多すぎると、パッチが 1 つずつ実行され、パフォーマンスが大幅に低下します。キー値を追加すると、パフォーマンスの低下を大幅に防ぐことができます。

結論は:

したがって、キー値は、DOM ツリーが diff アルゴリズムを実行するときに役割を果たします。 1 つの機能は、新しい Vnode と古い Vnode が同じであるかどうかを判断して、比較とレンダリングの次のステップを実行することです。 もう 1 つの機能は、コンポーネントを再利用できるかどうか、および再レンダリングする必要があるかどうかを判断することです。

Vue3 におけるキーの役割と動作原理に関するこの記事はこれで終わりです。Vue3 におけるキーの役割と動作原理の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue リストレンダリングでキーが果たす役割の詳細な説明
  • Vueにおけるキーの役割と原理の詳細な説明
  • Vueリストレンダリングキーの原理と機能の詳細な説明

<<:  Alibaba Cloud Server で MySQL デュアルマシン ホットスタンバイを手動で実装する 2 つの方法

>>:  Linux trコマンドの使い方

推薦する

計算機機能を実装するミニプログラム

この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

Angularコンポーネント投影の詳細な説明

目次概要1. 簡単な例1.サブコンポーネントの<ng-content>ディレクティブを使...

vsftpd ユーザーが ssh 経由でログインすることを禁止する方法

序文vsftp は使いやすく安全な FTP サーバー ソフトウェアです。システムユーザーまたは仮想ユ...

Windows Server 2016 標準キー アクティベーション キー シリアル番号

Windows Server 2016 アクティベーション キーを皆さんと共有したいと思います。wi...

Win10 での MySQL 8.0.15 のインストールと設定のグラフィック チュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

MySQLの文字列インターセプト関連関数の概要

この記事では、MySQL の文字列インターセプト関連の機能を紹介します。具体的な内容は以下のとおりで...

JavaScript で右クリック メニューを統合する layim のサンプル コード

目次1. 効果の実証2. 実装チュートリアル3. 最後に、完全なコードを添付します4. その他の右ク...

MySQL 学習ノート ヘルプ ドキュメント

システムヘルプを表示help contents mysql> ヘルプコンテンツ; ヘルプ カテ...

mysql 5.7.5 m15 winx64.zip インストール チュートリアル

win7 64 ビットで mysql-5.7.5-m15-winx64 をインストールして構成する方...

MySQL でのワイルドカードを使用したファジークエリの実装に関する簡単な説明

MySQL データベースでは、あいまいクエリが必要な場合にワイルドカードを使用します。まず、演算子と...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

MySQL でストアド プロシージャを作成し、ループでレコードを追加する方法

この記事では、例を使用して、MySQL でストアド プロシージャを作成し、ループでレコードを追加する...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...