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最適化に役立ちます

推薦する

ショートカットアイコンとアイコンコードの違いの紹介

ステートメント 1: <link rel="shortcut icon" ...

ルートパスワードを変更するための MySQL 設定、MySQL サーバー接続、MySQL 共通コマンド図

1. ルートパスワードの設定と変更mysql が起動しているかどうかを確認します。起動していない場合...

アコーディオン効果を実現するJavaScript

この記事では、アコーディオン効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

Tomcat が IDEA のコンソールで文字化けを起こし、IDEA エンコーディングを UTF-8 に設定する方法

1. まず、TomcatログのエンコーディングとIdeaログ表示コンソールのエンコーディングを区別す...

MySQLのデッドロックチェック処理の通常の方法

通常、デッドロックが発生すると、重みが最も小さい接続が強制終了され、ロールバックされます。ただし、最...

Vue 仮想 DOM の問題について

目次1. 仮想DOMとは何ですか? 2. 仮想 DOM が必要な理由3. 仮想DOMはどのようにして...

Vue3+Element+Tsは、フォームの基本的な検索リセットやその他の機能を実装します

Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...

JS の効率的なマジック演算子の概要

JavaScript は現在、毎年新しいバージョンがリリースされており、より便利で効率的な新しい演算...

MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

1. はじめにバージョン 5.0 以降でサポートされています。特定の機能を実行するための SQL ス...

uniapp アプレットでウォーターフォール フロー レイアウトを実装するためのアイデアとコード

1. はじめに今、ウォーターフォールフローについて書くことは、古い内容の焼き直しと見なされますか?気...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

Vue での this.$set の使用に関する詳細な説明

目次Vue での this.$set の使用使用なぜレスポンシブなのか?分析する要約するVue での...

JavaScriptのループの違いについての詳細な説明

目次序文列挙可能なプロパティ反復可能なオブジェクトforEachメソッドとmapメソッドチェーン呼び...

MySQL 8.0.22 のインストールと設定のグラフィックチュートリアル

MySQL8.0.22のインストールと設定(超詳細)参考までに、具体的な内容は次のとおりです。みなさ...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...