目次
1. v-if と v-for の役割" >1. v-if と v-for の役割
2. 2 つの優先順位" >2. 2 つの優先順位
##3 . 注意事項同じ要素に対して v-if と v-for を同時に使用しないでください。パフォーマンスの無駄が発生します (各レンダリングが最初にループし、次に条件判定が行われます) " >##3 . 注意事項同じ要素に対して v-if と v-for を同時に使用しないでください。パフォーマンスの無駄が発生します (各レンダリングが最初にループし、次に条件判定が行われます)
ホームページ ウェブフロントエンド フロントエンドQ&A Vue の v-if と v-for の違いは何ですか

Vue の v-if と v-for の違いは何ですか

Dec 27, 2022 pm 06:48 PM
vue3 v-if v-for

v-if と v-for の違い: 1. 異なる関数。v-if 命令は、コンテンツの一部を条件付きでレンダリングするために使用されます。このコンテンツは、命令は true 値を返します レンダリング; v-for ディレクティブは、配列に基づいてリストをレンダリングします。 2. 優先順位が異なる v-for の方が v-if よりも優先され、if 判定の場合は v-if よりも先に v-for が判定されます。

Vue の v-if と v-for の違いは何ですか

#このチュートリアルの動作環境: Windows7 システム、vue3 バージョン、DELL G3 コンピューター。

まず、公式ドキュメントには v-for と v-if の併用は推奨されないことが明記されています。

1. v-if と v-for の役割

v-if ディレクティブ

は、コンテンツの一部を条件付きでレンダリングするために使用されます 。このコンテンツは、ディレクティブ の式が true 値を返した場合にのみ 表示されます。

v-for ディレクティブは、

配列に基づいてリスト をレンダリングします。 v-for ディレクティブには、item in items という形式の特別な構文が必要です。ここで、items はソース データ配列またはオブジェクトであり、item は反復される配列要素のエイリアスです。

v-for では、

キー値 を設定し、各キー値が一意であることを確認することをお勧めします。これにより、 diff アルゴリズムの最適化が容易になります

この 2 つの使用法の違いは次のとおりです:

<div v-if="isShow" >123</div>
  
<li v-for="item in items" :key="item.id">
  {{ item.label }}
</li>
ログイン後にコピー

2. 2 つの優先順位

使用中、v-for は v-if よりも優先されます

v-if と v-for はどちらも vue テンプレート システムの命令です

vue テンプレートの場合がコンパイルされると、

コマンド システムが実行可能なレンダリング関数に変換されます

p タグを記述し、v-if および v-for

<div id="app">
  <p v-if="isShow" v-for="item in items">
    {{ item.title }}
  </p>
</div>
ログイン後にコピー

を使用してvue インスタンスでは、isShow と項目 data

const app = new Vue({
 el: "#app",
 data() {
  return {
   items: [
    { title: "foo" },
    { title: "baz" }]
  }
 },
 computed: {
  isShow() {
   return this.items && this.items.length > 0
  }
 }
})
ログイン後にコピー

template 命令を格納するためのコードが render 関数で生成され、レンダリング関数は app.$options.render

ƒ anonymous() {
 with (this) { return
  _c(&#39;div&#39;, { attrs: { "id": "app" } }, 
  _l((items), function (item) { return (isShow) ? _c(&#39;p&#39;, [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) }
}
ログイン後にコピー

_l を通じて取得できます。は vue 関数のリストレンダリングで、関数内で if 判定が行われます

最初の結論は v-for の方が v-if よりも優先度が高いということです

次に v-for と v-ifは異なるラベルに配置されます

<div id="app">
  <template v-if="isShow">
    <p v-for="item in items">{{item.title}}</p>
  </template>
</div>
ログイン後にコピー

次に、レンダリング関数を出力します

ƒ anonymous() {
 with(this){return
  _c(&#39;div&#39;,{attrs:{"id":"app"}},
  [(isShow)?[_v("\n"),
  _l((items),function(item){return _c(&#39;p&#39;,[_v(_s(item.title))])})]:_e()],2)}
}
ログイン後にコピー

この時点で、v-for と v-if が異なるタグに作用する場合、最初に判定され、次に判定されることがわかります。リストが表示されます

もう一度vueのソースコードを確認してみましょう

ソースコードの場所:\vue-dev\src\compiler\codegen\index.js

export function genElement (el: ASTElement, state: CodegenState): string {
 if (el.parent) {
  el.pre = el.pre || el.parent.pre
 }
 if (el.staticRoot && !el.staticProcessed) {
  return genStatic(el, state)
 } else if (el.once && !el.onceProcessed) {
  return genOnce(el, state)
 } else if (el.for && !el.forProcessed) {
  return genFor(el, state)
 } else if (el.if && !el.ifProcessed) {
  return genIf(el, state)
 } else if (el.tag === &#39;template&#39; && !el.slotTarget && !state.pre) {
  return genChildren(el, state) || &#39;void 0&#39;
 } else if (el.tag === &#39;slot&#39;) {
  return genSlot(el, state)
 } else {
  // component or element
  ...
}
ログイン後にコピー

if判定をする際に、 v-for は v-If よりも優れています。

最終的な判定結果は、v-for が v-if よりも優先されるということです。

##3 . 注意事項同じ要素に対して v-if と v-for を同時に使用しないでください。パフォーマンスの無駄が発生します (各レンダリングが最初にループし、次に条件判定が行われます)

これを回避する場合 この場合、テンプレートは外層にネストされており(ページレンダリングではdomノードは生成されません)、この層でv-if判定が行われ、内部でv-forループが行われます

<template v-if="isShow">
  <p v-for="item in items">
</template>
ログイン後にコピー

条件がループ内に表示される場合は、計算された属性を通じて事前に表示する必要のない項目を除外できます。

computed: {
  items: function() {
   return this.list.filter(function (item) {
    return item.isShow
   })
  }
}
ログイン後にコピー

ケースの説明:

理由: v-for は v-if よりも優先されます。毎回配列全体を走査する必要があるため、不要な計算が発生し、パフォーマンスに影響します。

たとえば、v-for を使用してループします。ページ上に 100 個の li タグがありますが、index=97 の li タグのコンテンツのみが表示され、残りはすべて非表示になります。

100 個のリストで 1 つのデータのみを使用する必要がある場合でも、配列全体をループします。

 <ul>
    <li v-for="item in list" v-if="item.actived">{{item.name}}</li>
 </ul>
ログイン後にコピー

解決策: computed を使用します

<ul>
    <li v-for="item in activeList">{{item.name}}</li>
</ul>

computed: {
  activeList() {
    return this.list.filter(val => {
      return val.actived;
    });
  }
},
ログイン後にコピー

[関連する推奨事項:

vuejs ビデオ チュートリアル

Web フロントエンド開発]

以上がVue の v-if と v-for の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

ページの部分的な更新を実現するには、ローカル コンポーネント (dom) の再レンダリングを実装するだけで済みます。 Vue でこの効果を実現する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠内の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構文のコンポーネントのガードには o しかないので、

Vue3 でアバターを選択してトリミングする方法 Vue3 でアバターを選択してトリミングする方法 May 29, 2023 am 10:22 AM

最終的な効果は、VueCropper コンポーネントのyarnaddvue-cropper@next をインストールすることです。上記のインストール値は Vue3 用です。Vue2 の場合、または他の方法を参照したい場合は、公式 npm アドレス: 公式チュートリアルにアクセスしてください。また、コンポーネント内で参照して使用するのも非常に簡単です。必要なのは、対応するコンポーネントとそのスタイル ファイルを導入することだけです。ここではグローバルに参照しませんが、import{userInfoByRequest}from'../js/api を導入するだけです。 ' コンポーネント ファイルにインポートします。import{VueCropper}from'vue-cropper&

vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia で無意味なリフレッシュを実現 1. まず、プロジェクト内の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 May 28, 2023 am 11:29 AM

Vue を使用してカスタム要素を構築する WebComponents は、開発者が再利用可能なカスタム要素 (カスタム要素) を作成できるようにする一連の Web ネイティブ API の総称です。カスタム要素の主な利点は、フレームワークがなくても、任意のフレームワークで使用できることです。これらは、異なるフロントエンド テクノロジ スタックを使用している可能性のあるエンド ユーザーをターゲットにする場合、または最終アプリケーションを使用するコンポーネントの実装の詳細から切り離したい場合に最適です。 Vue と WebComponents は補完的なテクノロジであり、Vue はカスタム要素の使用と作成に対する優れたサポートを提供します。カスタム要素を既存の Vue アプリケーションに統合したり、Vue を使用してビルドしたりできます。

Vue3 の v-for 関数の詳細な説明: リスト データ レンダリングの完璧なソリューション Vue3 の v-for 関数の詳細な説明: リスト データ レンダリングの完璧なソリューション Jun 18, 2023 am 09:57 AM

デジタルテクノロジーの継続的な進歩に伴い、フロントエンド開発はますます人気のある職業になっています。 Vue3 は、そのシンプルさ、使いやすさ、効率性、安定性により、ますます多くの開発者の最初の選択肢となっています。このうち v-for 関数は、Vue3 のリストデータの描画に使用されるコア関数の 1 つです。この記事では、実際の開発の問題を解決するために Vue3 の v-for 関数をよりよく使用できるように、Vue3 の v-for 関数について詳しく説明します。 1. 基本構文 v-for 関数の基本構文は次のとおりです。 &lt;divv-

Vue エラー: v-if ディレクティブは条件付きレンダリングに正しく使用できません。解決方法は? Vue エラー: v-if ディレクティブは条件付きレンダリングに正しく使用できません。解決方法は? Aug 19, 2023 pm 01:09 PM

Vue エラー: v-if ディレクティブは条件付きレンダリングに正しく使用できません。解決方法は? Vue 開発では、条件に基づいてページ内の特定のコンテンツをレンダリングするために v-if ディレクティブがよく使用されます。ただし、v-if 命令を正しく使用しても、期待した結果が得られず、エラー メッセージが表示されるという問題が発生することがあります。この記事では、この問題の解決策について説明し、理解を助けるサンプル コードをいくつか紹介します。 1. 問題の説明 通常、Vue テンプレートの v-if ディレクティブを使用して、

v-for を使用して Vue で動的ソートを実装するためのヒント v-for を使用して Vue で動的ソートを実装するためのヒント Jun 25, 2023 am 09:18 AM

Vue は、動的な Web ページや複雑なアプリケーションを簡単に構築できる最新の JavaScript フレームワークです。 Vue では、v-for を使用してループ構造を簡単に作成し、データを反復的にレンダリングできます。一部の特定のシナリオでは、v-for を使用して動的並べ替えを実装することもできます。この記事では、v-for を使用して Vue で動的並べ替え手法を実装する方法と、いくつかのアプリケーション シナリオと例を紹介します。 1. v-for を使用して簡単にします

Vue で v-for を使用するためのベスト プラクティスとパフォーマンスの最適化方法 Vue で v-for を使用するためのベスト プラクティスとパフォーマンスの最適化方法 Jul 17, 2023 am 08:53 AM

Vue で v-for を使用するためのベスト プラクティスとパフォーマンスの最適化方法 はじめに: Vue 開発では、v-for 命令を使用するのが非常に一般的です。これにより、配列またはオブジェクトのデータを簡単にトラバースしてテンプレートにレンダリングできます。ただし、v-for を不適切に使用すると、大規模なデータを処理するときにパフォーマンスの問題が発生する可能性があります。この記事では、v-for ディレクティブを使用する際のベスト プラクティスを紹介し、パフォーマンスを最適化する方法をいくつか紹介します。ベスト プラクティス: Vue で v-for 命令を使用して、一意の Key 値を使用してデータの各項目をレンダリングする場合、次のことを行う必要があります。

See all articles