https://v3.ko.vuejs.org/guide/list.html#배열-변경-감지
위 사이트에서 설명 하듯이 변이 메소드들은 원본의 배열을 변경한다.
그리고 변이 메소드들은 반응성을 가진다.
그렇지만 filter, concat, slice 같은 새 배열을 반환하는 비-변이 메소스도 있다.
이런 것들은 기존의 배열에 다시 할당 해 주면 마찬가지로 반응성을 가지게 된다.
그렇다고 기존 DOM 을 버리고 다시 렌더링 하는것이 아니다.
Vue 는 기존의 DOM 요소 재사용을 최대화 하기 위해 몇가지 똑똑한 방법을 사용한다.
$ npm i -D shortid // 고유한 키 값을 만들어주는 패키지
// Click me! 를 통해 Orange 를 push 해 주는 반응성을 가지고 있다.
<template>
<button @click="handler">
Click me!
</button>
<ul>
<li
v-for="{ id, name } in newFruits"
:key="id">
{{ name }}-{{ id }}
</li>
</ul>
</template>
<script>
import shortid from 'shortid'
export default {
data() {
return {
fruits: ['Apple', 'Banana', 'Cherry', 'Apple'],
}
},
computed: {
newFruits() {
return this.fruits.map(fruit=> ({
id: shortid.generate(),
name:fruit
}))
}
},
methods: {
handler() {
this.fruits.push('Orange')
}
}
}
</script>