본문 바로가기
Framework/vue_Foundation

Conditional Rendering(v-if, v-show)

by cariño 2023. 1. 5.
728x90
반응형


Conditional Rendering

[v-if] [v-else] [v-else-if] [v-show]

<template>
  <div>
    <h2 v-if="num === 0">The number is zero</h2>
    <h2 v-else-if="num < 0">The number is negative</h2>
    <h2 v-else-if="num > 0">The number is positive</h2>
    <h2 v-else>Not a number</h2>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num: -5,
    };
  },
};
</script>

 

 

conditionally render multiple elements

<template>
  <div>
    <h2>vishwa</h2>
    <h2>codevolution</h2>
    <h2>vue</h2>
  </div>
 </template>
 
<script>
export default {
  data() {
    return {
      display: true,
    };
  },
}
</script>

div로 감싸져있는 h2요소들이 있다. 

해당 코는 콘솔에서 확인해보면 

 

콘솔에서도 마찬가지로 div안에 h2 요소들이 있는 것을 확인할 수 있다. 

하지만 div대신 template으로 감싸게 된다면 콘솔에 찍히는 모양이 다르다.

 

<template>
  <template v-if="display">
    <h2>vishwa</h2>
    <h2>codevolution</h2>
    <h2>vue</h2>
  </template>
</template>

 

dom에 대한 추가된 사항이 없이 h2요소만 찍히게 되는 것을 확인할 수 있다. 

 

 

 

[v-if와 v-show는 언제 사용해야할까?]

 

v-if가 false라면 DOM에서 지워져 실제로 그려주지 않게 된다.
v-show가 false라면 css style의 display:none 상태가 된다.

둘의 가장 큰 특징은 조건부를 이용해서 컴포넌트 혹은 요소를 숨길 수 있다.

 

v-show는 초기 조건 관계 없이 엘리먼트가 항상 렌더링 된다. (초기 렌더링 비용이 높다)

v-if는 조건에 따르기에 참이 될 때까지 렌더링 되지 않는다. (전환 비용이 높다)

 

자주 바뀌는 경우라면 display:none속성을 사용하는 것이 더 효율적인 방법이다. 

하지만 렌더링 조건이 런타임 동안 변경될 가능성이 없거나 단일 조건에 의존하는 여러 요소가 있는 경우는 v-if가 더 나은 선택이다. 

만일 숨겨져야하는 액션이 반복되게 된다면 v-show를 사용하고 그 외의 상황이라면  v-if를 사용하는 것이 적절하다. 

728x90

'Framework > vue_Foundation' 카테고리의 다른 글

Event handling(vue)  (0) 2023.01.05
v-for Directive  (0) 2023.01.05
Binding(vue.js)  (0) 2023.01.05
vue VSCode Snippets extension  (0) 2023.01.02
Lifecycle Hooks (vue.js)  (0) 2022.12.25

댓글