728x90
🌲Computed
계산된 데이터를 활용하는 방식으로 computed 옵션에 선언한다.
예시 1
hasFruit() { 배열 데이터의 길이가 0보다 클때 }
<script>
export default {
data() {
return {
fruits: [
'Apple', 'Banana', 'Cherry'
]
}
},
computed: {
hasFruit() {
return this.fruits.length > 0
}
}
}
</script>
이렇게 만들어진 hasFruit함수는 template에서 아래와 같이 v-if디렉티브(불린)에 넣어 활용
-> 배열 데이터가 0보다 크면 표시하고 그렇지 않으면 보이지 않게 되는 결과
<template>
<section v-if="hasFruit">
<h1>Fruits</h1>
<ul>
<li
v-for="fruit in fruits"
:key="fruit">
{{ fruit }}
</li>
</ul>
</section>
</template>
예시 2
reverseFruits() { 데이터 배열의 문자를 split하고 reverse하여 join하는 함수 }
<script>
export default {
data() {
return {
fruits: [
'Apple', 'Banana', 'Cherry'
]
}
},
computed: {
reverseFruits() {
return this.fruits.map(fruit => {
return fruit.split('').reverse().join('')
})
}
}
}
</script>
reverseFruits로 완성된 데이터배열을 반복하여 li에 나열
<template>
<section>
<ul>
<li v-for="fruit in reverseFruits" :key="fruit"></li>
</ul>
</section>
</template>
🌲Caching
🌳Computed VS Methods
Computed에는 캐싱이라는 기능이 있어 한 번만 연산되기 때문에 데이터를 최적화할 수 있다.
반면 methods는 출력될 때마다 연산된다.
<template>
<h1>{{ reversedMessage }}</h1>
<h1>{{ reversedMessage }}</h1>
<h1>{{ reversedMessage }}</h1>
</template>
<script>
export default {
data() {
return {
msg: 'hello!'
}
},
computed: {
reversedMessage() {
return this.msg.split('').reverse().join('')
}
},
methods: {
reverseMessage() {
return this.msg.split('').reverse().join('')
}
}
}
</script>
🌲Getter & Setter
계산된 데이터 Computed는 읽기전용Readonly이기 때문에 메소드에 연산자를 할당하더라도 반응하지 않는다. Computed 내부에 있는 값을 얻어내는 용도로만 사용되는 의미로 이러한 방식을 Getter라고 한다.
🌳Getter + Setter
Getter에 Setter기능을 추가하는 방법
Computed옵션에서 get(){}과 set(){}으로 나누어 데이터를 받아들일 수 있는 구조로 변경한다.
<template>
<button @click="add">ADD</button>
<h1>{{ reversedMessage }}</h1>
<h1>{{ reversedMessage }}</h1>
<h1>{{ reversedMessage }}</h1>
</template>
<script>
export default {
// getter, setter
data() {
return {
msg: 'hello!'
}
},
computed: {
reversedMessage: {
get() {
return this.msg.split('').reverse().join('')
},
set(newValue) {
this.msg = newValue
}
}
},
methods: {
add() {
this.reversedMessage += '!!'
}
}
}
</script>
🌲Watch
데이터의 변경사항을 감시하여 로직을 실행하는데 활용
<template>
<h1 @click="changeMessage">{{ msg }}</h1> //Good!
<h1>{{ reversedMessage }}</h1> // !olleh
</template>
<script>
export default {
data() {
return {
msg: 'hello!'
}
},
computed: {
reversedMessage() {
return this.msg.split('').reverse().join('')
}
},
watch: { //변경사항을 감시
msg() {
console.log(this.msg)
}
},
methods: {
changeMessage() {
this.msg = 'Good!'
}
}
}
</script>
728x90
'FE' 카테고리의 다른 글
Vue.js 조건부 렌더링 v-if, v-show (0) | 2021.12.11 |
---|---|
Vue.js class, style binding (0) | 2021.12.11 |
Vue.js 템플릿 기본 문법 - 보간법, 디렉티브(동적 전달인자) (0) | 2021.12.11 |
Vuejs 컴포넌트 연결하는 방법 (0) | 2021.12.11 |
Vue.js설치방법과 webpack template에서 사용법 (0) | 2021.12.06 |