Vue:Computed
vue에서 data 대신, 복잡한 로직은 computed
속성을 사용한다.
computed 속성의 캐싱 vs 메소드
표현식에서 메소드를 호출하여 같은 결과를 얻을 수도 있습니다.
// 컴포넌트 내부
methods: {
reversedMessage: function () {
return this.message.split('').reverse().join('')
}
}
computed
속성 대신 메소드와 같은 함수를 정의할 수도 있습니다. 최종 결과에 대해 두 가지 접근 방식은 서로 동일합니다. 차이점은 computed
속성은 종속 대상을 따라 저장(캐싱)된다는 것 입니다. computed
속성은 해당 속성이 종속된 대상이 변경될 때만 함수를 실행합니다. 즉 message
가 변경되지 않는 한, computed
속성인 reversedMessage
를 여러 번 요청해도 계산을 다시 하지 않고 계산되어 있던 결과를 즉시 반환합니다.
업데이트 되지 않는 경우
또한 Date.now()
처럼 아무 곳에도 의존하지 않는 computed
속성의 경우 절대로 업데이트되지 않는다는 뜻입니다.
computed: {
now: function () {
return Date.now()
}
}
Simple example
html file:
<div id="example">
<p>원본 메시지: "{{ message }}"</p>
<p>역순으로 표시한 메시지: "{{ reversedMessage }}"</p>
</div>
javascript file:
var vm = new Vue({
el: '#example',
data: {
message: '안녕하세요'
},
computed: {
// 계산된 getter
reversedMessage: function () {
// `this` 는 vm 인스턴스를 가리킵니다.
return this.message.split('').reverse().join('')
}
}
})
computed 속성의 setter 함수
computed 속성은 기본적으로 getter 함수만 가지고 있지만, 필요한 경우 setter 함수를 만들어 쓸 수 있습니다.
// ...
computed: {
fullName: {
// getter
get: function () {
return this.firstName + ' ' + this.lastName
},
// setter
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
// ...
이제 vm.fullName = 'John Doe'
를 실행하면 설정자가 호출되고 vm.firstName
과 vm.lastName
이 그에 따라 업데이트 됩니다.
Troubleshooting
TypeScript Getter 오동작 오류
Vue-class-component#TypeScript Getter 오동작 오류 항목 참조.