수

Vuejs computed

· 2019-01-16 (수) 17:15:59 · 1916

Vuejs computed

 

computed속성
템플릿 내에 표현식을 넣으면 편리합니다. 하지만 간단한 연산일 때만 이용하는 것이 좋습니다.
너무 많은 연산을 템플릿 안에서 하면 코드가 비대해지고 유지보수가 어렵습니다.
아래의 예를 봅시다.

<div id="example">
    {{ message.split('').reverse().join('')}}
</div>
이 템플릿은 더 이상 간단하고 명료하지 않습니다. message를 역순으로 표시한다는 것을
알려면 찬찬히 살펴봐야 하겠죠. 
템플릿에 메시지를 역순으로 표시할 일이 더 있으면 문제는 더 악화될 것입니다. 

복잡한 로직이라면 반드시 computed속성을 사용해야 하는 이유입니다. 

 

기본예제
HTML 부분
<div id="example">
    <p> 원본 메시지 : "{{message}}</p>
    <p>역순으로 표시한 메시지 : "{{reversedMessage}}"</p>
</div>

 

JS부분
var vm = new Vue({
    el : "#example",
    data : {
        message: '안녕하세요'
    },
    computed : {
        //계산된 getter
        reversedMessage : function(){
            //this 는 vm인스턴스를 가리킵니다. 
            return this.message.split('').reverse().join('')
        }
    }
})

이 예제에서는 computed속성인 reversedMessage를 선언했습니다.
우리가 작성한 함수는 vm.reversedMessage속성에 대한 getter함수로 사용됩니다.
console.log(vm.reversedMessage)    // => '요세하녕안'
vm.message = "Goodbye"
console.log(vm.reversedMessage) //=> 'eybdooG'

콘솔에서 이 예제를 직접 해볼 수 있습니다. 
vm.reversedMessage의 값은 항상 vm.message의 값에 의존합니다.

일반 속성처럼 computed 속성에도 템플릿에서 데이터 바인딩 할 수 있습니다.
Vue는 vm.reversedMessage가 vm.message에 의존하는 것을 알고 있기 때문에
vm.message가 바뀔 때 vm.reversedMessage에 의존하는 바인딩을 모두 업데이트할 것입니다.

그리고 가장 중요한 것은 우리가 선언적으로 의존관계를 만들었다는 것입니다. 
computed속성의 getter함수는 사이드 이펙트가 없어 코드를 테스트하거나 이해하기 쉽습니다.
 

|
댓글을 작성하시려면 로그인이 필요합니다.

퍼블리셔팁

1,282건

퍼블리싱과 관련된 유용한 정보를 공유하세요. 질문은 상단의 QA에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
기타 19-02-04 조회 4,412
기타 19-02-04 조회 6,735
기타 19-01-31 조회 2,960
기타 19-01-31 조회 2,878
기타 19-01-31 조회 2,371
기타 19-01-28 조회 2,816
기타 19-01-28 조회 2,622
기타 19-01-28 조회 2,655
기타 19-01-24 조회 2,637
기타 19-01-24 조회 2,385
기타 19-01-24 조회 2,728
기타 19-01-23 조회 2,272
기타 19-01-23 조회 2,452
기타 19-01-23 조회 2,624
기타 19-01-22 조회 2,719
기타 19-01-22 조회 2,210
기타 19-01-22 조회 2,093
기타 19-01-21 조회 2,572
기타 19-01-16 조회 2,164
기타 19-01-16 조회 1,917
기타 19-01-16 조회 2,121
기타 19-01-12 조회 1,814
기타 19-01-12 조회 2,018
기타 19-01-12 조회 1,735
기타 19-01-11 조회 1,859
기타 19-01-11 조회 1,779
기타 19-01-11 조회 2,074
기타 19-01-10 조회 1,797
기타 19-01-10 조회 2,132
기타 19-01-10 조회 2,121