v-if
예제 :
결과 :
# template에 v-if을 갖는 조건부 그룹 만들기
v-if
는 디렉티브기 때문에 하나의 엘리먼트에 추가해야한다. 하지만 하나 이상의 엘리먼트를 트랜지션하려면 어떻게 해야할까? 이 경우 우리는 보이지 않는 래퍼 역할을 하는 <template>
엘리먼트에 v-if
를 사용할 수 있다. 최종 렌더링 결과에는 <template>
엘리먼트가 포함되지 않는다.
예제 :
결과 :
# v-else-if
v-else-if
는 이름에서 알 수 있듯, v-if
에 대한 “else if 블록” 역할을 한다.
또한 여러 개를 사용할 수 있다.
v-else
와 마찬가지로, v-else-if
엘리먼트는 v-if
또는 v-else-if
엘리먼트 바로 뒤에 와야 한다.
# key 를 이용한 재사용 가능한 엘리먼트 제어
예제 :
위 코드에서 loginType
을 바꾸어도 사용자가 이미 입력한 내용은 지워지지 않는다.
두 템플릿 모두 같은 요소를 사용하므로 <input>
은 대체되지 않고 단지 placeholder
만 변경된다.
하지만, 위 코드는 항상 바람직하지 않는다. 때문에 “이 두 엘리먼트는 완전히 별개이므로 다시 사용하지 마십시오.”라고 알리는 방법을 제공한다. 유일한 값으로 key
속성을 추가.
예제 :
이제 트랜지션 할 때마다 입력이 처음부터 렌더링.
<label>
엘리먼트는 key
속성이 없기 때문에 여전히 효율적으로 재사용 된다.
v-show
엘리먼트를 조건부로 표시하기 위한 또 다른 옵션은 v-show
디렉티브. 사용법은 거의 동일.
차이점은 v-show
가 있는 엘리먼트는 항상 렌더링 되고 DOM에 남아있다.
v-show
는 단순히 엘리먼트에 display
CSS 속성을 토글.
v-show
는 <template>
구문을 지원하지 않으며 v-else
와도 작동하지 않는다.
v-if vs v-show
v-if
는 조건부 블럭 안의 이벤트 리스너와 자식 컴포넌트가 토글하는 동안 적절하게 제거되고 다시 만들어지기 때문에 “진짜” 조건부 렌더링.
v-if
는 또한 게으르다. 초기 렌더링에서 조건이 거짓인 경우 아무것도 하지 않는다. 조건 블록이 처음으로 참이 될 때 까지 렌더링 되지 않는다.
비교해보면, v-show
는 훨씬 단순하다. CSS 기반 토글만으로 초기 조건에 관계 없이 엘리먼트가 항상 렌더링 된다.
일반적으로 v-if
는 토글 비용이 높고 v-show
는 초기 렌더링 비용이 더 높다. 매우 자주 바꾸기를 원한다면 v-show
를, 런타임 시 조건이 바뀌지 않으면 v-if
를 권장.
예제를 실행하여 개발자 창을 보면, v-if
는 <!---->로 처리되어 아예 렌더링이 되지 않고, v-show
는 실제로 코드는 삽입되지만 display: none
되어 스타일로 보이지 않도록 처리가 된다.
따라서 우리는 앞으로 조건에 따라만 실행하고 싶다면 v-if
디렉티브를 사용하고, 코드는 있지만 스타일로 display: none
처리를 하고 싶다면 v-show
를 사용하는 것이 바람직하다.
v-if 와 v-for
v-if
와 함께 사용하는 경우, v-for
는 v-if
보다 높은 우선순위를 갖는다. 자세한 내용은 리스트 렌더링 가이드를 확인.
'Vue.js' 카테고리의 다른 글
이벤트 렌더링 (0) | 2019.01.15 |
---|---|
리스트 렌더링 (0) | 2019.01.14 |
클래스와 스타일 바인딩 (0) | 2019.01.14 |
MVVM, MVC 패턴 (0) | 2019.01.08 |
Computed와 Watch (0) | 2019.01.08 |