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コマンドの使い方

推薦する

nginx のバージョン番号と WEB サーバー情報を隠すための解決策

Nginxはバージョン情報を隠すだけでなく、カスタムWebサーバー情報もサポートします。まずは最終的...

Vue補間式とv-textディレクティブの違い

目次1. プラグイン式を使用する2. プラグイン式でv-cloakを使用してちらつきの問題を解決する...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

MySQL例外に対する一般的な解決策をいくつか分析する

目次序文1. コードによって設定されたデータベース名またはパスワードがローカルデータベースと一致して...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.12のインストールと設定方法を記録してみんなで共有します。 1. インストール1...

HTML テーブル タグ チュートリアル (31): セルの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、セルの幅と高さはコンテンツに応じて自動的に調整されますが、セルの幅と高さを手動で設定...

MySQL マスタースレーブレプリケーションの役割と動作原理の詳細な説明

1. マスタースレーブレプリケーションとは何ですか?マスタースレーブレプリケーションは、スレーブデー...

css-loader を使用して vue-cli で css モジュールを実装する

【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...

CentOS7 ファイアウォールとオープンポートの簡単な使い方の簡単な紹介

概要(公式にはより詳しい説明があります) Firewalld は、ネットワーク接続またはインターフェ...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

この記事は、JQueryの基本的な操作を理解し、始めるのに役立ちます。

目次1. Jquery を使用する手順: (1)jsライブラリをインポートする(2)ページ読み込みイ...

HTML 特殊文字エンコーディング CSS3 コンテンツに関する簡単な説明:「私は特別なシンボルです」

プロジェクトで使用されている特殊文字とアイコンHTMLコードXML/HTML コードコンテンツをクリ...

Elasticsearch を使用する際の一般的な問題の解決策

1. redis で使用すると Netty の起動競合が発生するため、***Application ...

複数ページ通信を実現する JavaScript の sharedWorker の詳細な例

こんなことがありました。今日はGitHubで遊んでいました。最初はログインせずにいくつかのページを閲...

mysql8.0.11データディレクトリ移行の実装

mysql のデフォルトのストレージ ディレクトリは/var/lib/mysql/です。以下は、デフ...