ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vue.js 문법 - Computed
    Vue/Vue.js 문법 2021. 7. 12. 22:44

     

    Computed 속성

     

    - 계산된 속성, 읽기 전용(Readonly)

    - 종속 대상을 따라 저장(캐싱)

    - data 속성에 변화가 있을때 자동으로 다시 연산

     

    예제1

     

    <!-- App.vue -->
    <!-- components 내부 Fruits.vue 를 import하여 화면에 출력 -->
    
    <template>
      <Fruits />
    </template>
    
    <script>
    import Fruits from '~/components/Fruits'
    export default {
      components: {
        Fruits
      }
    }
    </script>

     

    <!-- Fruit.vue -->
    
    <template>
      <section v-if="hasFruit">
        <h1>Fruits</h1>
        <ul>
          <li 
            v-for="fruit in fruits"
            :key="fruit">
            {{ fruit }}
          </li>
        </ul>
      </section>
      <section>
        <h1>Reverse Fruits</h1>
        <ul>
          <li 
            v-for="fruit in reverseFruits"
            :key="fruit">
            {{ fruit }}
          </li>
        </ul>
      </section>
    </template>
    
    <script>
    export default {
      data() {
        return {
          fruits: [
            'Apple', 'Banana', 'Cherry'
          ]
        }
      },
      computed: {
        hasFruit() {
          return this.fruits.length > 0
        },
        reverseFruits() {
          return this.fruits.map(fruit => {
    
            // 'Apple' => ['A','p','p','l','e']
            // => ['e','l','p','p','A'] -> 'elppA'
            return fruit.split('').reverse().join('')
          })
        }
      }
    }
    </script>
    
    <style>
      body {
        font-size: 50px;
      }
    </style>

     

    결과

     

    Computed 캐싱

     

    <!-- App.vue -->
    <!-- Method 사용 (비효율적)  -->
    
    <template>
      <h1>{{ reverseMessage() }}</h1>
      <h1>{{ reverseMessage() }}</h1>
      <h1>{{ reverseMessage() }}</h1>
      <h1>{{ reverseMessage() }}</h1>
    </template>
    
    <script>
    export default {
      data() {
        return {
          msg: "Hello Computed!",
        }
      },
      methods: {
        reverseMessage() {
          return this.msg.split('').reverse().join('')
        }
      }
    };
    </script>

     

    <!-- App.vue -->
    <!-- Computed 사용 (효율적) -->
    <!-- 계산된 데이터 (캐싱) 기능 -->
    <!-- 한번 연산 해놓은 값은 반복적으로 계산하지 않는다 -->
    
    <template>
      <h1>{{ reversedMessage }}</h1>
      <h1>{{ reversedMessage }}</h1>
      <h1>{{ reversedMessage }}</h1>
      <h1>{{ reversedMessage }}</h1>
    </template>
    
    <script>
    export default {
      data() {
        return {
          msg: "Hello Computed!",
        }
      },
      computed: {
        reversedMessage() {
          return this.msg.split('').reverse().join('')
        }
      }
    };
    </script>

    'Vue > Vue.js 문법' 카테고리의 다른 글

    Vue.js 문법 - Watch  (0) 2021.07.13
    Vue.js 문법 - Getter, Setter  (0) 2021.07.13
    Vue.js 문법 - 템플릿 문법  (0) 2021.07.12
    Vue.js 문법 - 인스턴스와 라이프사이클  (0) 2021.07.09
    Vue.js 조건문과 반복문  (0) 2021.07.07

    댓글

Designed by Tistory.