조건부 렌더링

토리최고·2022년 1월 16일
0

Vue 문법

목록 보기
8/20
post-thumbnail

v-if, v-else-if, v-else

v-if 다음 v-else-if 다음 v-else
true라는 값을 가져야지만 화면에 렌더링 해준다. false는 렌더링 하지 않음

<template>
  <button @click="handler">
    Click me!
  </button>
  <h1 v-if="isShow">
    Hello?!
  </h1>
  <h1 v-else-if="count > 3">
    Count > 3
  </h1>
  <h1 v-else>
    good~
  </h1>
</template>

<script>
export default {
  data() {
    return {
      isShow: true,
      count: 0
    }
  },
  methods: {
    handler() {
      this.isShow = !this.isShow
      this.count += 1
    }
  }
}
</script>

<style>

</style>

template 태그

div와 다른 점: button 아래 특정 태그로 감싸져있지 않고 바로 button 아래에 나타남
주의점: v-if를 최상위 template태그에 갖다놓으면 적용 되지 않음

<template>
  <button @click="handler">
    Click me!
  </button>
  <template v-if="isShow">
    <h1>Title</h1>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
  </template>
</template>

<script>
export default {
  data() {
    return {
      isShow: true,
      count: 0
    }
  },
  methods: {
    handler() {
      this.isShow = !this.isShow
      this.count += 1
    }
  }
}
</script>

<style>

</style>

v-show

구조적인 렌더링은 하지만, displaynone으로 뜬다! 둘의 차이는 v-show를 쓴 엘리먼트의 경우, 항상 렌더링 되어 DOM(HTML)에 남아있다는 점. v-show는 단순히 엘리먼트의 CSS display 속성만을 전환.

<template>
  <button @click="handler">
    Click me!
  </button>
  <h1 v-show="isShow">
    Hello?!
  </h1>
</template>

<script>
export default {
  data() {
    return {
      isShow: false,
      count: 0
    }
  },
  methods: {
    handler() {
      this.isShow = !this.isShow,
      this.count += 1
    }
  }
}
</script>

<style>

</style>

v-if 대 v-show

v-if는 "실제(real)" 조건부 렌더링입니다. 전환 도중 조건부 블록 내부의 이벤트 리스너 및 자식 컴포넌트들이 올바르게 제거되고 다시 생성되기 때문입니다.

또한 v-if는 게으릅니다(lazy). 초기 렌더링 시, 조건이 거짓(false)이면 아무 작업도 하지 않습니다. 조건부 블록은 조건이 처음으로 참(true)이 될 때까지 렌더링되지 않습니다.

이에 비해 v-show는 훨씬 간단합니다. 엘리먼트는 CSS 기반 전환으로 초기 조건과 관계 없이 항상 렌더링됩니다. (역자 주: v-show는 엘리먼트를 DOM에 우선 렌더링하고 조건에 따라 CSS display:block/display:none 속성을 전환합니다.)

일반적으로 v-if는 전환 비용이 높은 반면, v-show는 초기 렌더링 비용이 높습니다. 그러므로 무언가를 자주 전환해야 한다면 v-show를 사용하는 게 좋고, 런타임 시 조건이 변경되지 않는다면 v-if를 사용하는 게 더 낫습니다.

v-if를 먼저 사용하고, 사용자가 많이 토글을 한다면 v-show로 바꾸는 방향으로!

0개의 댓글

관련 채용 정보