📚 이번 포스팅에서는 조건부 렌더링에 대해서 자세하게 알아보도록 하자.
표현식 값의 true/false를 기반으로 요소를 조건부로 렌더링
표현식 값의 true/false를 기반으로 요소의 가시성(visibility)을 전환
초기 조건이 false인 경우 아무 작업도 수행하지 않음
초기 렌더링 비용이 낮지만, 토글 비용이 높음
조건이 자주 변경되지 않을 때 유용
초기 조건에 관계없이 항상 렌더링
초기 렌더링 비용이 낮지만, 토글 비용이 낮음
요소가 자주 토글될 때 유용
<body>
<div id="app">
<button @click="toggleVisibility">Toggle</button>
<p v-if="isVisible">This is controlled by v-if</p>
<p v-show="isVisible">This is controlled by v-show</p>
</div>
<script>
const { createApp, ref } = Vue
createApp({
setup() {
const isVisible = ref(true)
const toggleVisibility = () => {
isVisible.value = !isVisible.value
}
return {
isVisible,
toggleVisibility
}
}
}).mount('#app')
</script>
</body>

위 코드를 실행시켜서 toggle 버튼을 눌러보면

이렇게 사라지는 것을 볼 수 있다.
하지만 개발자 도구를 열고 Elements 탭을 확인하면

v-if 요소는 DOM에서 실제로 사라지고 나타나는 것을 볼 수 있고
v-show 요소는 항상 DOM에 존재하며 style 속성만 변경되는 것을 확인할 수 있다!!
정리를 해보자면 v-if는 조건에 따라 요소를 완전히 추가/제거하는 반면에 v-show는 CSS를 사용하여 요소의 가시성만 토글한다는 것을 확인할 수 있다.