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 のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: HTMLポップアップ透明レイヤーインスタンスのサイズを設定でき、比例することができます
>>: Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル
まず、provide/inject を使用する理由について説明しましょう。祖父コンポーネントと孫コン...
フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要...
MySQL をインストールした後、テーブル データを保存および削除しようとすると、常にエラー メッセ...
目次序文フロントエンドモジュール開発の価値厄介な名前の競合面倒なファイル依存関係モジュール化の利点C...
各 Web ページには、URL () で識別されるアドレスがあります。通常、Web サイト内でリンク...
記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...
0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...
ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...
透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...
輸入:プロジェクトの要件により、同じコードの一部をコンポーネントにカプセル化し、必要な場所にインポー...
Docker イメージの最初の行は FROM alpine などのイメージで始まりますが、最初のベー...
導入実稼働環境では、データの損失を回避するために、通常、データベースは定期的にバックアップされます。...
序文MySQL では、クロスデータベース クエリは主に 2 つの状況に分けられます。1 つは同じサー...
MySQL で中国語を入力すると、次のエラーが発生します。エラー 1366: 1366: 行 1 の...
目次序文1. レスポンシブシステムの重要な要素1. データの変更を監視する方法2. 依存関係を収集す...