vue では v-if と v-for のどちらが優先されますか?
vue2 では、v-for は v-if よりも高い優先順位を持ち、vue3 では、v-if は v-for よりも高い優先順位を持ちます。 vue では、同じ要素に対して v-if と v-for を同時に使用しないでください。これにより、パフォーマンスが無駄になります (各レンダリングが最初にループし、次に条件判断が実行されます)。この状況を回避したい場合は、テンプレートを使用してください。外側の層にネストすることができます (ページのレンダリングでは DOM ノードは生成されません)。この層で v-if 判定が実行され、内部で v-for ループが実行されます。
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"><modal></modal>
</pre><div class="contentsignin">ログイン後にコピー</div></div>
<li>
{{ item.label }}
</li>
優先順位実際、vue2 と vue3 の答えは完全に逆です。
- vue2 では、v-for は v-if よりも高い優先順位を持ちます。
- vue3 では、v-if は v での優先順位が高くなります。 -for
## v-for および v-if
vue2 v-if
とv-for はどちらも
vue テンプレート システムのディレクティブです。
vue
render 関数に変換されます。
p
v-if と
v-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>
- 現時点では、
- v-if をコンテナに移動します要素 (
、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 }) } }
以上がvue では v-if と v-for のどちらが優先されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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