Vue 조건부 렌더링

YEZI🎐·2022년 11월 22일
0

Vue

목록 보기
13/45

조건부 렌더링

v-if

v-if 디렏티브는 조건에 따라 블록을 렌더링하기 위해 사용된다.
디렉티브의 표현식이 true 값을 변환할 때만 렌더링 된다.

<h1 v-if="awesome">Vue is awesome!</h1>

v-else

v-else와 함께 else 블록을 추가하는 것도 가능하다.
v-else 엘리먼트는 v-if 엘리먼트 또는 v-else-if 엘리먼트 바로 뒤에 있어야 인식할 수 있다.

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>

v-else-if

v-else-if는 이름에서 알 수 있듯, v-if에 대한 else if 역할을 한다.
여러 개를 사용할 수 있으며, v-if 또는 v-else-if 엘리먼트 바로 뒤에 와야 인식할 수 있다.

<div v-if="type === 'A'">A</div>
<div v-else-if="type === 'B'">B</div>
<div v-else-if="type === 'C'">C</div>
<div v-else>Not A/B/C</div>

<template>에 v-if를 갖는 조건부 그룹 만들기

v-if는 디렉티브이기 때문에 하나의 엘리번트에 추가해야 한다.
하나 이상의 엘리먼트를 트렌지션 하기위해선,
보이지 않는 wrapper 역할을 하는 <template> 엘리먼트에 v-if 디렉티브를 사용한다.

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

key를 이용한 재사용 가능한 엘리먼트 제어

Vue는 효율적인 렌더링을 위해 처음부터 엘리먼트를 렌더링 하지 않고 다시 사용한다.
예를 들어 여러 로그인 유형을 트렌지션 하는 경우이다.

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address">
</template>

위 코드에서 loginType을 바꾸어도 사용자가 이미 입력한 내용은 지워지지 않는다.
두 템플릿 모두 같은 요소(label, input)를 사용하므로 <input>은 대체되지 않고, placeholder만 변경된다.

<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address" key="email-input">
</template>

유일한 값으로 key 속성을 추가해 key 속성이 없는 <label> 엘리먼트는 재사용되고,
key 속성을 가진 <input>은 대체된다.

v-show

  • 엘리먼트를 조건부로 표시하기 위한 디렉티브
  • v-if와 차이점은 v-show 엘리먼트는 항상 렌더링되며 DOM에 남아있음
  • v-show는 단순이 엘리먼트에 display CSS 속성을 토글

사용법

<h1 v-show="ok">Hello!</h1>
profile
까먹지마도토도토잠보🐘

0개의 댓글