VueJS 速習チュートリアル

Vue v-show

1. 表示状態の条件制御 (Conditional Visibility)

v-show ディレクティブを使用して、要素の表示(Visible)と非表示を切り替える方法を学びましょう。

v-show は、HTML 属性に直接条件を記述できるため、非常に簡単に使用できます。このディレクティブは、条件が false の場合に CSS の display プロパティの値を none に設定することで、要素を隠します。

HTML 属性として v-show を記述した後は、そのタグを表示するかどうかを決定する 条件(Condition) を指定する必要があります。

2. 構文 (Syntax)

<div v-show="showDiv">この div タグは非表示にできます</div>

上記のコードにおいて、showDiv はプロパティ値として true または false を持つ ブーリアン(Boolean) 型の Vue データプロパティを表します。showDivtrue であれば div タグが表示され、false であれば表示されません。

3. 使用例

showDiv プロパティが true に設定されている場合のみ <div> 要素を表示する例です。

<div id="app">
  <div v-show="showDiv">この div タグは非表示にできます</div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        // 表示状態を管理する変数
        showDiv: true
      }
    }
  })
  app.mount('#app')
</script>

4. v-show と v-if の比較

v-showv-if の決定的な違いは、レンダリング(Rendering) の仕組みにあります。v-if は条件に応じて要素をその都度作成(マウント)または削除(アンマウント)しますが、v-show の場合は要素は常に作成された状態で維持され、可視性(Visibility) のみが変更されます。

そのため、オブジェクトの表示状態を頻繁に切り替える(トグルする)場合は、v-show を使用するのが最適です。ブラウザにとって負荷が少なく、応答速度の向上と優れた ユーザーエクスペリエンス(UX) につながります。

一方で、v-if を選択する主な理由は、v-else-ifv-else と組み合わせて複雑な条件分岐を構成できる点にあります。

5. 動作比較の例

以下の例では、同じ Vue プロパティに基づいて、2つの異なる <div> 要素に対して v-showv-if を個別に適用しています。
ブラウザのデベロッパーツールでコードを インスペクト(検証) すると、showDivfalse のとき、v-show は要素を保持したまま CSS の display: none を付与しているのに対し、v-if は要素自体を完全に破棄(Destroy)していることが確認できます。

<div id="app">
  <div v-show="showDiv">v-show を使用した div タグ</div>
  
  <div v-if="showDiv">v-if を使用した div タグ</div>
</div>

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  const app = Vue.createApp({
    data() {
      return {
        showDiv: true
      }
    }
  })
  app.mount('#app')
</script>