computed
연산 결과를 캐싱하여 re-render 될 때마다 불필요한 연산 줄임
templete 연산
<template>
<div>
{{message}}
<h2>거꾸로 message</h2>
{{message.split('').reverse().join('')}}
</div>
</template>
<script>
export default {
data() {
return {
message: 'hello'
}
}
}
</script>
- 위처럼 작성하면 state나 props 변경으로 렌더링 일어날 때마다 연산이 발생
computed 연산
<template>
<div>
{{message}}
<h2>거꾸로 message</h2>
{{reverseMessage}}
</div>
</template>
<script>
export default {
data() {
return {
message: 'hello'
}
},
computed: {
reverseMessage() {
return this.message.split('').reverse().join('')
}
}
}
</script>
- message가 바뀌지 않으면 캐싱된 연산을 렌더링 때 사용
methods 연산
<template>
<div>
{{message}}
<h2>거꾸로 message</h2>
{{reverseMessage}}
</div>
</template>
<script>
export default {
data() {
return {
message: 'hello'
}
},
methods: {
reverseMessage() {
return this.message.split('').reverse().join('')
}
}
}
</script>
- methods에서 연산을 하면 결과는 같으나 함수는 렌더링 때마다 실행되어 캐싱 이득을 취할 수 없음
watch
state나 props를 감시하여 값 변경될 때의 행동 지정
watch로 fullname 만들기
<template>
<div>
<input type="text" v-model="firstname">
<input type="text" v-model="lastname">
<h2>full name</h2>
<span>{{fullname}}</span>
</div>
</template>
<script>
export default {
data() {
return {
firstname: '',
lastname: '',
fullname: ''
}
},
watch: {
firstname(val) {
this.fullname = `${val} ${this.lastname}`
},
lastname(val) {
this.fullname = `${this.firstname} ${val}`
}
}
}
</script>
- watch 프로퍼티로 변화 감시를 원하는 state나 props 값 넣어 함수 생성
- 매개변수는 변경된 값을 가리킴
- first last 변화 감지하여 fullname 생성
- 사실 위 방법보단 computed가 더 좋음
computed로 fullname 만들기
<template>
<div>
<input type="text" v-model="firstname">
<input type="text" v-model="lastname">
<h2>full name</h2>
<span>{{fullname}}</span>
</div>
</template>
<script>
export default {
data() {
return {
firstname: '',
lastname: ''
}
},
computed: {
fullname() {
return `${this.firstname} ${this.lastname}`
}
}
}
</script>
- state에서 fullname 제거
- computed에서 first last 한 번에 감지하여 fullname
computed & watch 어떻게 써야할까?
computed는 복잡한 연산을 캐싱할 때 사용 (사실 웬만한 연산이 있다면 사용해주는게 좋을 듯!)
watch는 비동기 통신처럼 언제 값이 변하는지 예측이 어려울 때 사용
- 데이터를 받아오는데 몇 초가 걸릴지 예상이 안 되면 watch로 감시
참고 사이트