Vue에서 데이터를 다루는 Options에 대해 알아봅시다
Vue 인스턴스에 추가되는 계산된 속성
<div id="example">
<p>원본 메시지: "{{ message }}"</p>
<p>역순으로 표시한 메시지: "{{ reversedMessage }}"</p>
</div>
var vm = new Vue({
el: '#example',
data: {
message: '안녕하세요'
},
computed: {
// 계산된 getter
reversedMessage: function () {
// `this` 는 vm 인스턴스를 가리킵니다.
return this.message.split('').reverse().join('')
}
}
})
원본메시지: 안녕하세요
역순으로 표시한 메시지: 요세하녕안
console.log(vm.reversedMessage) // => '요세하녕안'
vm.message = 'Goodbye'
console.log(vm.reversedMessage) // => 'eybdooG'
vm.reversedMessage
의 값은 항상 vm.message
의 값에 의존합니다.<p>뒤집힌 메시지: "{{ reversedMessage() }}"</p>
methods: {
reversedMessage: function () {
return this.message.split('').reverse().join('')
}
}
-> 종속대상이 변경되지 않으면 기존에 계산해놓은 값을 그대로 가져오기 떄문에, 굉장히 합리적으로 자원을 활용할 수 있어요!!
data가 변경되는 것을 감시하는 속성
첫번째 인자로 새로운 값
그리고 두 번째인자로 이전값
이 넘어온다.<body>
<div id="app">
<button @click="numberA++"> A+</button>
<button @click="numberB++"> B+</button>
<p>computed A: {{ computedNumberA }}</p>
<p>method B: {{ methodNumberB() }}</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="vue.js"></script>
</body>
const app = new Vue({
el: '#app',
data: {
numberA: 0,
numberB: 0,
constant: 100,
},
computed: {
computedNumberA() {
console.log('computedNumberA 호출!')
return this.numberA + this.constant
}
},
methods: {
methodNumberB() {
console.log('methodNumberA 호출!')
return this.numberB + this.constant
}
},
watch: {
numberA(newVal, oldVal) {
console.log(`watched: ${oldval} => ${newVal}`)
}
}
})
watch
는 Vue 인스턴스의 데이터 변경을 관찰하고 이에 반응하는 보다 일반적인 속성 watch
는 데이터가 바뀌면 함수 실행해! 라는 명령형 프로그래밍 방식
computed
는 계산해야 하는 목표 데이터를 정의하는 선언형 프로그래밍 방식
<div id="demo">{{ fullName }}</div>
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar',
fullName: 'Foo Bar'
},
watch: {
firstName: function (val) {
this.fullName = val + ' ' + this.lastName
},
lastName: function (val) {
this.fullName = this.firstName + ' ' + val
}
}
})
var vm = new Vue({
el: '#demo',
data: {
firstName: 'Foo',
lastName: 'Bar'
},
computed: {
fullName: function () {
return this.firstName + ' ' + this.lastName
}
}
})
-> 일반적으로 선언형 프로그래밍 방식이 코드 반복이 적어 우수한 경향을 보입니다