Vue 条件付きレンダリング v-if と v-show

Vue 条件付きレンダリング v-if と v-show

1. 動詞-if

テンプレートでは、条件に応じてレンダリングできます。条件は、 v-ifv-else-ifv-elseを組み合わせて実装されます。

サンプルコードは次のとおりです。

<div id="アプリ">
    <p v-if="weather == 'sun'">今日は公園に行きましょう! </p>
    <p v-else-if="weather == 'rain'">今日は映画を見に行きましょう! </p>
    <p v-else>今日はどこにも行きません! </p>
</div>
<スクリプト>
    vm = new Vue({
        el: "#app",
        データ: {
            天気: '太陽'
        }
    });
</スクリプト>
 

2. <template> で v-if を使用する

場合によっては、1 つの条件で複数のhtml要素をロードする必要があります。その場合は、 template要素で実行できます。

サンプルコードは次のとおりです。

<div id="アプリ">
    <テンプレート v-if="年齢<18">
        <p>数学は何点ですか? </p>
        <p>英語の点数はいくつですか? </p>
    </テンプレート>
    <テンプレート v-else-if="年齢>=18 && 年齢<25">
        <p>あなたは結婚していますか? </p>
        <p>大学院入試は受けましたか? </p>
    </テンプレート>
    <テンプレート v-else>
        <p>給料は上がりましたか? </p>
        <p>給料はいくらですか? </p>
    </テンプレート>
</div>
<スクリプト>
    vm = new Vue({
        el: "#app",
        データ: {
            年齢: 24
        }
    });
</スクリプト>
 

3. キーを使用して再利用可能な要素を管理する

さらに、テンプレートでは、 Vue再レンダリングするのではなく既存の要素を再利用しようとするため、より効率的になります。

ユーザーがさまざまなログイン方法を切り替えることができるようにする場合:

<div id="アプリ">
  <テンプレート v-if="ログインタイプ === 'ユーザー名'">
    <label for="username">ユーザー名:</label>
    <input type="text" id="ユーザー名" name="ユーザー名" placeholder="ユーザー名">
  </テンプレート>
  <テンプレート v-else>
    <label for="email">メール</label>
    <input type="text" id="email" name="email" placeholder="メールアドレス">
  </テンプレート>
  <div>
    <button @click="changeLoginType">ログインタイプを切り替える</button>
  </div>
</div>
<スクリプト>
  constアプリ = 新しいVue({
    el: "#app",
    データ: {
      ログインタイプ: "ユーザー名"
    },
    メソッド: {
      ログインタイプを変更する(){
        // タイプがユーザー名の場合はメールに切り替え、それ以外の場合は this.loginType = this.loginType==="username"?"email":"username";
      }
    }
  })
</スクリプト>

次に、効果図を見てみましょう。

ここで問題が発生します。 username入力ボックスに情報を入力してメールボックスに切り替えると、以前の情報が保持されます。これは明らかに要件に沿っていません。切り替えるたびにhtml要素を再レンダリングする場合は、再レンダリングする必要がある要素に一意のkey属性を追加できます。 key属性には整数または文字列型を使用することをお勧めします。

サンプルコードは次のとおりです。

<div id="アプリ">
  <テンプレート v-if="ログインタイプ === 'ユーザー名'">
    <label for="username">ユーザー名:</label>
    <input type="text" id="ユーザー名" name="ユーザー名" placeholder="ユーザー名" key="ユーザー名">
  </テンプレート>
  <テンプレート v-else>
    <label for="email">メール</label>
    <input type="text" id="email" name="email" placeholder="Email" key="email">
  </テンプレート>
  <div>
    <button @click="changeLoginType">ログインタイプを切り替える</button>
  </div>
</div>

ユーザー名123メール モードに切り替えると、入力ボックスの123消えることがわかります。

注: <label> 要素にはキー属性が追加されていないため、引き続き効果的に再利用できます。

4. Vショー

条件付きで要素を表示するための別のオプションはv-showディレクティブです。使い方はほぼ同じです:

<h1 v-show="ok">こんにちは!</h1>


違いは、 v-showを持つ要素は常にレンダリングされ、 DOM内に残ることです。 v-show 、要素のCSS property displayを切り替えるだけです。

注意: v-show は <template> 要素をサポートしておらず、v-else もサポートしていません。

4.1 v-if と v-show

v-ifは「true」の条件付きレンダリングであり、条件ブロック内のイベント リスナーと子コンポーネントが切り替え中に適切に破棄され、再構築されることを保証します。

v-ifも遅延です。最初のレンダリングで条件が false の場合、何も行われません。条件ブロックは、条件が初めて true になるまでレンダリングされません。

それに比べて、 v-showはるかに単純です。要素は初期条件に関係なく常にレンダリングされ、 CSSに基づいて単純に切り替えられます。

一般的に、 v-ifは切り替えコストが高く、 v-showは初期レンダリング コストが高くなります。したがって、非常に頻繁に切り替える必要がある場合はv-showを使用する方が適切であり、実行時に条件がほとんど変化しない場合はv-if使用する方が適切です。

これで、vue 条件付きレンダリング v-if と v-show に関するこの記事は終了です。vue 条件付きレンダリングに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の条件付きレンダリングとリストレンダリングの詳細な理解
  • Vue.js の条件付きレンダリング命令の簡単な分析
  • Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング
  • Vueのリストレンダリングの詳細な説明
  • vue の v-for ディレクティブはリストのレンダリングを完了します
  • Vue リストのレンダリング、並べ替え、フィルタリングの詳細な説明
  • Vue 条件付きレンダリングとリストレンダリング

<<:  Nginx が Apache より優れている理由

>>:  DIV+CSS命名規則の詳細な説明はSEO最適化に役立ちます

推薦する

Vue 組み込みコンポーネントのキープアライブでの LRU アルゴリズムの使用

目次Vue の keep-alive 組み込みコンポーネントの使用でもこのアルゴリズムが使用されます...

州と市町村の連携を簡単に実現するJavaScript

この記事では、省と市の簡単な連携を実現するためのJavaScriptの具体的なコードを参考までに紹介...

MySQL データをエクスポートおよびインポートするための HeidiSQL ツール

場合によっては、SQL へのデータのエクスポートとインポートを容易にするために、特定のツールを使用し...

Linux C++ マルチスレッド同期の非常に詳細な説明

目次1. ミューテックス1. ミューテックスの初期化2. ミューテックスロックの関連特性と分類3. ...

MySQL パフォーマンス最適化インデックス プッシュダウン

インデックス条件プッシュダウン (ICP) は MySQL 5.6 で導入され、クエリを最適化するた...

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...

MySQLにおける正規表現の一般的な使用法

MySQL における Regexp の一般的な使用法特定の文字列を含むあいまい一致# コンテンツフィ...

Nginx インストールの詳細なチュートリアル

1. Nginxの簡単な紹介Nginx は、無料のオープンソースの高性能 HTTP サーバーおよびリ...

VMware12 に CentOS8 をインストールする方法 (VM 仮想マシンに CentOS8 をインストールするチュートリアル)

数日前に CentOS8 がリリースされました。8 の最初のバージョンですが、今日は VM12 に ...

Vueはキャンバスを使用して画像圧縮アップロードを実現します

この記事では、キャンバスを使用して画像圧縮アップロードを実現するVueの具体的なコードを参考までに共...

Vue+Element UI でサマリーポップアップウィンドウを実装するプロセス全体

シナリオ: 検査文書には n 個の検査詳細があり、検査詳細には n 個の検査項目があります。実装効果...

MySQL 5.7.17 のインストールと使用方法のグラフィックチュートリアル

MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...

Docker で複数の MySQL コンテナを作成して実行する方法の例

1. mysql/mysql-server:latestイメージを使用してMySQLインスタンスを素...

Dockerはコンテナにポートを動的に公開します

コンテナのIPアドレスを表示するdocker examine <コンテナ名またはID> ...

React構成サブルーティングの実装

1. コンポーネント First.js にはサブコンポーネントがあります。 './Admin...