-
Vue.js 문법 - 리스트 렌더링Vue/Vue.js 문법 2021. 7. 14. 15:20
v-for
- v-for 디렉티브를 사용하여 배열을 기반으로 리스트를 렌더링
- item in items 형태로 특별한 문법이 필요
- items는 원본 데이터 배열, item은 반복되는 배열 엘리먼트의 별칭
예제1
<!-- App.vue --> <template> <ul> <li v-for="(fruit, index) in fruits" :key="fruit"> {{ fruit }}-{{ index }} </li> </ul> </template> <script> export default { data() { return { fruits: ['Apple', 'Banana', 'Cherry'] } } } </script>
결과
예제2
<!-- App.vue --> <template> <ul> <li v-for="fruit in newFruits" :key="fruit.id"> {{ fruit.name }} </li> </ul> </template> <script> export default { data() { return { fruits: ['Apple', 'Banana', 'Cherry'], } }, computed: { newFruits() { return this.fruits.map((fruit, index) => { return { id: index, name: fruit } }) } } } </script>
코드 이해하기
- computed 속성을 통해 정렬된(계산된) 배열을 반환
- 배열 데이터 내부에는 객체 데이터 (id, name)가 들어있음
- :key 값으로 배열의 아이템을 구분 가능한 고유한 속성(id)을 부여
shortid 패키지
# 각각의 아이디를 고유하게 만들어주는 패키지
$ npm i -D shortid예제3
<!-- App.vue --> <template> <ul> <li v-for="fruit in newFruits" :key="fruit.id"> {{ fruit.name }}-{{ fruit.id }} </li> </ul> </template> <script> import shortid from 'shortid' export default { data() { return { fruits: ['Apple', 'Banana', 'Cherry'], } }, computed: { newFruits() { return this.fruits.map(fruit => ({ id: shortid.generate(), name: fruit })) } } } </script>
결과
객체 구조 분해
<template> <ul> <li v-for="{ id, name} in newFruits" :key="id"> {{ name }}-{{ id }} </li> </ul> </template>
- 예제3 <template> 부분을 객체 구조 분해를 통해 위와 같이 작성 가능
배열 변경 감지
변이 메소드
- Vue는 감시중인 배열의 변이 메소드를 래핑하여 뷰 갱신을 트리거 (반응성)
- 배열 데이터가 바뀌면 뷰가 갱신된다는 의미
래핑된 메소드
- push() - 배열 데이터 가장 마지막에 아이템을 삽입
- pop() - 배열 데이터 가장 마지막 아이템을 반환
- shift() - 배열 데이터 가장 앞에 아이템을 반환
- unshift() - 배열 데이터 가장 앞에 아이템을 삽입
- splice() - 인덱스를 이용해서 데이터를 삽입, 반환, 삭제
- sort() - 배열을 정렬
- reverse() - 배열을 뒤집어줌
배열 교체
- 변이 메소드는 호출된 원래 배열을 변경
- filter(), concat(), slice()와 같은 원래 배열을 변경하지 않고 항상 새 배열을 반환하는 메소드도 존재
- 이러한 메소드를 비-변이 메소드라 부름
- 비-변이 메소드로 작업할때 이전 배열을 새 배열로 바꿀수도 있다
/* 예제 */ example1.items = example1.items.filter(item => item.message.match(/Foo/))
'Vue > Vue.js 문법' 카테고리의 다른 글
Vue.js 문법 - 이벤트 수식어 (0) 2021.07.15 Vue.js 문법 - 이벤트 핸들링 (0) 2021.07.14 Vue-js 문법 - 조건부 렌더링 (0) 2021.07.14 Vue.js 문법 - 클래스와 스타일 바인딩 (0) 2021.07.13 Vue.js 문법 - Watch (0) 2021.07.13