티스토리 뷰

728x90

computed 속성을 사용하는 예제입니다.

 

 

Computed Properties - Intro to Vue.js | Vue Mastery

In this lesson, we’ll be covering Computed Properties. These are properties on the Vue instance that calculate a value rather than store a value.

www.vuemastery.com

 

<!DOCTYPE html>
<html>
    <head>
        <title>App</title>
        <link rel="stylesheet" type="text/css" href="./style.css">
    </head>
    <body>
        <div class="nav-bar"></div>
        <div id="app">
            <div class="product">
                <div class="product-image">
                    <img v-bind:src="image"/>
                </div>
            </div>
            <div class="product-info">
                <h1>{{ title }}</h1><span v-show="onSale">On Sale!</span>
                <p v-if="inStock">In Stock</p>
                <p v-else>Out of Stock</p>

                <ul>
                    <li v-for="detail in details">{{ detail }}</li>
                </ul>

                <div class="color-box"
                    v-for="(variant, index) in variants" 
                    :key="variant.variantId"
                    :style="{backgroundColor: variant.variantColor}"
                    @mouseover="updateProduct(index)"
                    >
                </div>

                <button v-on:click="addToCart"
                :disabled="!inStock"
                :class="{ disabledButton: !inStock }"
                >Add to cart</button>
                <div class="cart">
                    <p>Cart({{ cart }})</p>
                </div>
            </div>
        </div>

        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script src="main.js"></script>
    </body>
</html>

기존 코드에서 불필요한 데이터를 제거했습니다.

그리고 예제와 다르게 ES6 문법인 템플릿 문법을 사용해서 title를 노출하도록 했습니다.

var app = new Vue({
    el: '#app',
    data: {
        brand: 'Vue Mastery',
        product: 'Socks',
        selectedVarint: 0,
        onSale: false,
        details: ["80% cotton", "20% polyester", "Gender-neutral" ],
        variants: [
            {
                variantId: 2234,
                variantColor: "green",
                variantImage: "./assets/vmSocks-green-onWhite.jpg",
                variantQuantity: 10
            },
            {
                variantId: 2235,
                variantColor: "blue",
                variantImage: "./assets/vmSocks-blue-onWhite.jpg",
                variantQuantity: 0
            }
        ],
        cart: 0,
    },
    methods: {
        addToCart(){
            this.cart +=1
        },
        updateProduct(index){
            this.selectedVarint = index
        }
    },
    computed: {
        title(){
            return `${this.brand} ${this.product}`
        },
        image(){
            return this.variants[this.selectedVarint].variantImage
        },
        inStock(){
            return this.variants[this.selectedVarint].variantQuantity
        },
    }
})

computed로 선언한 메소드는 메서드 안에 선언된 데이터에 변경이 발생할 때만 업데이트됩니다. 변경되지 않으면 기존에 캐시 된 데이터를 반환합니다. 그렇기 때문에 불필요한 연산을 막을 수 있습니다.

하지만 이러한 속성을 잘 알고 사용해야 합니다. 만약 computed 메소드 내부 안에 업데이트될 데이터가 없다면 그 메서드는 영원히 같은 값을 반환합니다. 자세한 내용은 공식문서를 참고하세요.

728x90
댓글