VUE v-for の :key の詳細な説明

VUE v-for の :key の詳細な説明

v-for タグにキーが追加されていない場合。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta http-equiv="X-UA-compatible" content="IE=edge">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <script src="../../js/vue.js"></script>
  <title>v-for キーについて</title>
</head>
<本文>
  <div id="アプリ">
    <div>
      <input type="text" v-model="名前">
      <button @click="add">追加</button>
    </div>
    <ul>
      <li v-for="(リスト内の項目、インデックス)">
        <input type="checkbox"> {{item.name}}
      </li>
    </ul>
  </div>
  <script type="text/javascript">
    constアプリ = 新しいVue({
      el: '#app',
      データ() {
        戻る {
          名前: ''、
          新しいID: 3,
          リスト: [
            { id: 1, name: '张三' },
            { id: 2, 名前: 'Li Si' },
            { id: 3、名前: '王五' }
          ]、
        };
      },
      計算: {
      },
      メソッド: {
        追加() {
          //これはunshiftであることに注意してください
          this.list.unshift({ id: ++this.newId, name: this.name })
          this.name = ''
        }
      },
    });
  </スクリプト>
  <スタイルスコープ>
  </スタイル>
</本文>
</html>

李斯を選択して趙柳を加えた後、選択された人物は張三になりました。

ここに画像の説明を挿入

ここに画像の説明を挿入

v-for にキーがある場合を見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta http-equiv="X-UA-compatible" content="IE=edge">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <script src="../../js/vue.js"></script>
  <title>v-for キーについて</title>
</head>
<本文>
  <div id="アプリ">
    <div>
      <input type="text" v-model="名前">
      <button @click="add">追加</button>
    </div>
    <ul>
      <li v-for="(item, index) in list" :key="item.id">
        <input type="checkbox"> {{item.name}}
      </li>
    </ul>
  </div>
  <script type="text/javascript">
    constアプリ = 新しいVue({
      el: '#app',
      データ() {
        戻る {
          名前: ''、
          新しいID: 3,
          リスト: [
            { id: 1, name: '张三' },
            { id: 2, 名前: 'Li Si' },
            { id: 3、名前: '王五' }
          ]、
        };
      },
      計算: {
      },
      メソッド: {
        追加() {
          //これはunshiftであることに注意してください
          this.list.unshift({ id: ++this.newId, name: this.name })
          this.name = ''
        }
      },
    });
  </スクリプト>
  <スタイルスコープ>
  </スタイル>
</本文>
</html>

ここに画像の説明を挿入

ここに画像の説明を挿入

Li Si を選択して Zhao Liu を追加した後、選択された人物は依然として Li Si であり、変更はありません。

これは、Vue の下部にある Diff アルゴリズムによるものです。 diff アルゴリズムの処理方法は、次の図に示すように、操作の前後で DOM ツリーの同じレベルにあるノードをレイヤーごとに比較することです。

ここに画像の説明を挿入

レイヤー内に同一のノード、つまりリスト ノードが多数ある場合、Diff アルゴリズムの更新プロセスもデフォルトで上記の原則に従います。

たとえば、次のような状況を考えてみましょう。

ここに画像の説明を挿入

B と C の間に F を追加したいと考えています。Diff アルゴリズムのデフォルトの実装は次のとおりです。

ここに画像の説明を挿入

つまり、C を F に、D を C に、E を D に更新し、最後に E を挿入します。これは非効率的ではありませんか?

したがって、Diff アルゴリズムがノードを正しく識別し、新しいノードを挿入する正しい場所を見つけられるように、キーを使用して各ノードを一意に識別する必要があります。

ここに画像の説明を挿入

vue のリスト ループには、key = "一意の識別子" を追加する必要があります。一意の識別子は、アイテム内の id インデックスなどになります。vue コンポーネントは再利用性が高いため、Key を追加するとコンポーネントの一意性を識別できます。各コンポーネントをより適切に区別するために、キーの主な機能は、仮想 DOM を効率的に更新することです。

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue における v-for のキーの一意性の詳細な説明
  • Vue で v-for を使用するときに、インデックスをキーとして使用できないのはなぜですか?
  • VUEデモv-forにキーを追加する理由についての簡単な説明
  • vue v-for のループをトラバースするときにキー値エラーが発生する問題を解決する
  • Vue の v-for ループの主要属性に関する考慮事項のまとめ
  • Vue 2.0 の v-for 反復構文の変更点 (キー、インデックス) に関する簡単な説明

<<:  HTMLポップアップ透明レイヤーインスタンスのサイズを設定でき、比例することができます

>>:  Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル

推薦する

nginx ip ブラックリストの動的禁止の例

ウェブサイトが悪意を持ってリクエストされた場合、IP アドレスをブラックリストに登録することは重要な...

Vue コンポーネントはどのように解析され、レンダリングされるのでしょうか?

序文この記事では、Vue コンポーネントがどのように解析され、レンダリングされるかを説明します。 V...

HBuilderX で Tomcat 外部サーバーを設定して、JSP インターフェイスを表示および編集する方法の詳細な説明

1. 最初の方法は、ローカルのTomcatを起動してJSPを表示することです。 tomcatのweb...

CSS カウンターを使用して数字の順序付きリストを美しく表示する方法

Web デザインでは、Web サイトに表示されるデータの構造とコンテンツをユーザーが明確に理解できる...

検証例 MySQL | 同じ値を持つフィールドを更新すると、binlog に記録されます

1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...

Docker を使用して Jenkins をインストールするためのサンプル コード

Dockerコンテナのインストール時に遭遇しやすい2つの問題1.ポートはすでに割り当てられています(...

AES_ENCRYPT() と AES_DECRYPT() を使用して MySQL を暗号化および復号化する正しい方法の例

序文最近、仕事でAES_ENCRYPT()関数を使用してプレーンテキストを暗号化し、MySQL に保...

MySQLレジストリをクリアする方法

具体的な方法: 1. [ win+r ] を押して実行ウィンドウを開き、「regedit」と入力して...

私のCSSアーキテクチャのコンセプト - それは人によって異なり、ベストなものはなく、適切なものだけがある

はじめに<br />私はフロントエンド分野でかなり長い間働いており、CSS分野でも長い間...

Linux システムに docker をインストールし、ssh 経由で docker コンテナにログインする方法

注: 私はCentosを使ってdockerをインストールしていますステップ1: Dockerをインス...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

WeChatアプレットの手動および自動追跡の実装の詳細説明(Taro)

どの企業もユーザーベースを拡大したいのであれば、ユーザーの操作データを収集・分析する必要があり、その...

iviewは動的なフォームとカスタム検証期間の重複を実装します

フォーム項目を動的に追加するiview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設...

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

1. インストールパッケージMYSQLサービスダウンロードアドレス:MySQL公式サイトからダウンロ...

CentOS 7 構成 Tomcat9+MySQL ソリューション

Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...