본문 바로가기
웹(web)/프론트엔드-vue

todo list - v-for, computed exercise

by 바코94 2020. 7. 8.

 

 

코드 설명

 

html

1. <div id="app">

Vue에서 el: '#app'을 통해 등록할 태그

 

2. <div class="todos">

div 태그

 

3. <div v-for=~ :key="todo.id">

v-for="todo in computedTodos"

Vue에 있는 computedTodos 배열을 사용하여 하나씩 꺼내서 사용

:key="todo.id" 

꺼내온 todo의 id를 반복문의 key로 사용. v-for에는 :key를 항상 사용해야 함.

:key 는 v-bind:key와 같으며 key의 속성 값을 Vue의 데이터로 사용하기 위함.

 

4. <input type="checkbox" v-model="todo.done">

체크박스 타입의 인풋태그.

v-model="todo.done"

체크여부를 todo의 done 데이터와 연동하여 사용. 사용자가 체크박스를 체크하고 해제하는 것이 todo.done의 값을 바꾸게 됨. 반대로 todo.done의 값을 바꾸면 체크박스의 체크여부가 변경됨.

 

5. <span> {{todo.title}} </span>

todo의 title 데이터를 사용

 

js

1. el: '#app' 

html태그 중 id가 app인 곳에서 사용

 

2. data: { todos: [] }

배열 데이터 todos를 만듦

 

3. computed: { computedTodos() { ... } 

자주 사용될 computed Todos를 선언함. 내부에서 사용하는 데이터가 변경되지 않는 이상 계산된 값을 계속 사용.

 return this.todos.map((todo, index) =>{     

  return {

    ...todo,

    id: index+1,

    done: false

  }

}

 

return ~  -> computedTodos 라는 이름을 사용하면 ~에 해당하는 값을 사용하게 됨.

this.todos.map -> todos의 원소 값들 각각에 대해 진행 

(todo, index) -> 원소 값이 todo에 담기고 index도 사용 가능함.

{ ...todo,   -> todo의 객체를 spread하는 문법으로 {title: '아침 먹기'} 와 같은 값이 됨.

id: index + 1  -> ...todo를 사용하고 나서 id : index+1을 하면 덮어쓰는 효과가 됨. {title: '아침 먹기', id: 1}

done: false    -> ...todo 에 id를 덮어쓴 값에 done을 추가로 덮어쓰는 효과. 결국  {title: '아침 먹기', id: 1, done: false}

 

js 코드에서 주석 처리된 코드는 밑의 코드와 동일한 결과를 나타내는데 Object.assign을 찾아보면 이해할 수 있다. 빈 객체에 todo 속성들을 덮어쓰고 그 뒤에 id, done 속성을 덮어쓰는 것이다.

'웹(web) > 프론트엔드-vue' 카테고리의 다른 글

v-html  (0) 2020.07.08
v-bind , v-on 약어  (0) 2020.07.08
computed cache  (0) 2020.07.08
computed getter, setter  (0) 2020.07.08
watch, computed  (0) 2020.07.08