ホームページ ウェブフロントエンド フロントエンドQ&A vue では v-if と v-for のどちらが優先されますか?

vue では v-if と v-for のどちらが優先されますか?

Jul 20, 2022 pm 06:02 PM
vue vue.js v-if v-for

vue2 では、v-for は v-if よりも高い優先順位を持ち、vue3 では、v-if は v-for よりも高い優先順位を持ちます。 vue では、同じ要素に対して v-if と v-for を同時に使用しないでください。これにより、パフォーマンスが無駄になります (各レンダリングが最初にループし、次に条件判断が実行されます)。この状況を回避したい場合は、テンプレートを使用してください。外側の層にネストすることができます (ページのレンダリングでは DOM ノードは生成されません)。この層で v-if 判定が実行され、内部で v-for ループが実行されます。

vue では v-if と v-for のどちらが優先されますか?

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

v-if ディレクティブは、コンテンツを条件付きでレンダリングするために使用されます。ディレクティブは、コンテンツのブロックを条件付きでレンダリングするために使用されます。このコンテンツは、ディレクティブの式が true を返した場合にのみ表示されます。
v-for ディレクティブは、配列に基づいてリストをレンダリングします。 v-for ディレクティブには、item in items の形式の特別な構文が必要です。items はソース データ配列またはオブジェクト、item は、反復される配列要素のエイリアスです。

v-for の場合は、key 値を設定し、各 key 値が一意であることを確認することをお勧めします。これは ## です。 #diffアルゴリズムの最適化。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;modal&gt;&lt;/modal&gt; </pre><div class="contentsignin">ログイン後にコピー</div></div> <li>     {{ item.label }} </li>

優先順位実際、vue2 と vue3 の答えは完全に逆です。

    vue2 では、v-for は v-if よりも高い優先順位を持ちます。
  • vue3 では、v-if は v での優先順位が高くなります。 -for

vue では v-if と v-for のどちらが優先されますか?## v-for および v-if

vue2 v-if

v-for はどちらも vue テンプレート システムのディレクティブです。 vue

テンプレートがコンパイルされると、コマンド システムは実行可能な

render 関数に変換されます。 p

タグを記述し、

v-ifv-for

<div>
    <p>
        {{ item.title }}
    </p>
</div>
ログイン後にコピー
を使用して vue を作成します例:

isShow および items データを保存します。

const app = new Vue({
  el: "#app",
  data() {
    return {
      items: [
        { title: "foo" },
        { title: "baz" }]
    }
  },
  computed: {
    isShow() {
      return this.items && this.items.length > 0
    }
  }
})
ログイン後にコピー
ƒ anonymous() {
  with (this) { return 
    _c('div', { attrs: { "id": "app" } }, 
    _l((items), function (item) 
    { return (isShow) ? _c('p', [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) }
}
ログイン後にコピー
_l は

vue のリスト描画関数であり、関数内で if の判定が行われます。 暫定的な結論: v-for
v-if よりも優先されます。 次に、v-for
v-if を異なるラベル

<div>
    <template>
        <p>{{item.title}}</p>
    </template>
</div>
ログイン後にコピー
に配置し、render 関数

ƒ anonymous() {
  with(this){return 
    _c('div',{attrs:{"id":"app"}},
    [(isShow)?[_v("\n"),
    _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)}
}
ログイン後にコピー
を出力します。 現時点では、v-for と

v-if が異なるタグに作用する場合、最初にそれらが判断されてからリストがレンダリングされることがわかります。

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 === 'template' && !el.slotTarget && !state.pre) {
    return genChildren(el, state) || 'void 0'
  } else if (el.tag === 'slot') {
    return genSlot(el, state)
  } else {
    // component or element
    ...
}
ログイン後にコピー
if の判定を行う場合、

v-if よりも先に v-for が判定されます。 最後に、v-for

v-if よりも優先されます。 vue3 の v-for と v-if

#vue3 では、v-if は v-fo よりも優先度が高いため、v-if が実行されると、呼び出す変数はまだ存在しないため、例外が発生します

説明:

これを行う原因となる状況は通常 2 つあります:

1.

v-for="user in users" v-if="user.isActive"
ログイン後にコピー

のようなリストのプロジェクトをフィルタリングします:

v-for="user in users" v-if="shouldShowUsers"
ログイン後にコピー
    vue2 でそれらをまとめます。出力レンダリング関数から、ループが最初に実行され、その後条件が判断されることがわかります。たとえリスト要素のごく一部だけをレンダリングしたとしても、再レンダリングするたびにリスト全体を走査する必要があり、無駄が生じます。
  • vue3 では、v-if は v- よりも高い優先順位を持っています。 fo なので、v-if が実行されると、変数がまだ存在しないため、例外が発生します。
この時点で、計算されたプロパティ (

activeUsers## など) を定義します。 #) を実行し、フィルタリングされたリスト ( users.filter(u=>u.isActive) など) を返します。 2. 非表示にする必要があるリストのレンダリングを避けるために、

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

同様に、vue2 でもそれらをまとめると、出力レンダリング関数からわかります。最初にLoopを実行してから条件を判断することになりますが、たとえリスト内の要素の一部だけをレンダリングしたとしても、再レンダリングするたびにリスト全体を走査する必要があり、無駄が生じます。 #vue3 では、このように書いてもエラーは報告されませんが、公式はこれを外部で行うことをまだ推奨していません
  • 現時点では、
  • v-if
  • をコンテナに移動します要素 (
ul

ol など) を使用するか、外側に template のレイヤーをラップします。

同じ要素に対して v-if と v-for を同時に使用しないでください。パフォーマンスが無駄になります。 (各レンダリングは最初にループし、次に条件判断を実行します)

この状況を回避したい場合は、テンプレートを外側の層にネストします (ページのレンダリングでは dom ノードが生成されません)。この層 v-if 判定を行い、内部で v-for ループを実行します。

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

  • ループ内に条件が出現した場合、該当するものを除外できます。計算された属性を通じて事前に表示される項目
computed: {
    items: function() {
      return this.list.filter(function (item) {
        return item.isShow
      })
    }
}
ログイン後にコピー
ログイン後にコピー

【相关视频教程推荐: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)

Vue.js vs. React:プロジェクト固有の考慮事項 Vue.js vs. React:プロジェクト固有の考慮事項 Apr 09, 2025 am 12:01 AM

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

Vue Paginationの使用方法 Vue Paginationの使用方法 Apr 08, 2025 am 06:45 AM

ページネーションは、パフォーマンスとユーザーエクスペリエンスを向上させるために、大きなデータセットを小さなページに分割するテクノロジーです。 VUEでは、次の組み込みメソッドを使用してページを使用できます。ページの総数を計算します。TotalPages()トラバーサルページ番号:V-For Directive on Currentページを設定します。

See all articles