20210409(금)
2021-04-09
1. 학습 날짜
2021-04-09
2. 학습 시간
10:00 ~ 22:00
3. 학습 범위 및 주제
바닐라 자바스크립트로 MVC 패턴으로 todo 앱 만들기
vue 학습
4. 학습 목표
todo 앱 counter 기능 구현하기
5. 학습 정리
x
6. 상세 학습 내용
todo 앱 counter 기능 구현하기
counter 를 그냥 구현하면 쉽게 할 수 있겠지만, SPA 의 특성을 살리면서 구현하는것은 은근히 어려웠다.
특히 filter을 움직일 때 count 의 수가 동적으로 바뀌게 구현하려고 했는데 기존의 todo가 add 가 될 때 마다 + 1을 하고, 바로 view 에 넣는 방식이 문제가 됐었다.
왜냐하면 10개의 todo 중에 3개가 이미 completed 가 되었다면 completed 버튼을 눌렀을 때 count 가 3이 되어야하고, 이 때 todo 를 추가하면 새로 추가 된 요소는 completed 가 아닌 active 이므로 바로 active 로 가야하고, 현재 보고 있는 completed 에서는 수가 추가가 되면 안된다!!! 하지만 기존에 + 1 을 바로 하는 방식에서는 + 1 이 되므로 문제가 된다.
이 문제를 해결하기 위해서 기존의 방식인 + 1 을 하자마자 바로 view 에 적용하는걸 바꿔야했다.
따라서 todo가 + 1 될 때 마다 count 는 + 1 을 하지만 조건에 따라 count view가 바뀌고, 바뀌지 않게 수정했다.
더블클릭 이벤트 구현하기
흠.. 크게 어려웠던 건 없다.
다만 조금 헤맸던 부분은 더블클릭하고 값을 수정했을 때에 그 수정된 값을 어떻게 읽는지에 대한 문제였다.
평소 같았으면 금방해결했을 텐데 이상하게 잘 되지 않았지만,,, 결국 해결했다.
헤맸던 부분은 수정한 값이 도대체 어디에 저장이 되는지에 대한 문제였다.
input
태그 그 어디에도 수정된 값이 전달되지 않았었기 때문이다.결론은 그냥 DOM 요소를 찾아서
.value
속성을 이용해서 가져오기만 하면 되는거였다.그리고 여기서 처음으로
focusout
이라는 이벤트를 사용했다. 이 이벤트는 말 그대로 포커스를 읽으면 발생하는 이벤트다.이 부분에서도 한가지 이슈가 있었는데, 구현해야하는 todo앱에서 edit 하는 도중 ESC를 누르면 그동안 썼던 값을 버리고 기존의 값을 유지해야한다.
따라서 ESC 를 누르면 발생하는 이벤트인 focusout 이벤트를 사용했는데, enter 를 눌렀을 때 값을 적용한 이후에도 focusout이벤트가 또 발생한다는 것이었다. 따라서 이 부분을 해결하기 위해 조금은 아쉽지만, focusout이 발생할 때 호출하는 이벤트 핸들러에서 조건을 나눠서 처리를 하는 분기를 만들어야했다.
vue 학습
vue 의 watch와 computed 를 사용하면 data 속성을 감시할 수 있게 된다.
이 둘 모두 속성을 감지할 수 있다는데에는 공통점이 있지만 차이점이 존재해서 computed 는 주로 가벼운로직에 사용되고 watch는 fetch 등 무거운 로직에 사용된다
vue 가이드에서는 대부분의 상황에서 computed 를 사용할것을 권장한다.
7. 오늘 학습 내용에 대한 개인적인 총평
백본이 아닌 새로운 프레임워크를 학습하는데, 아직 많이 학습을 하지 않았지만 그래도 너무 기대가 된다.
얼른 빨리 해보고 뷰를 적용한 간단한 앱을 한번 만들어보고 싶다.
8. 다음 학습 계획
vue 강의 듣기
todo 리팩토링하기
model과 db
view 에서 render 를 하나로 만들고 나머지를 view 안으로 넣기
Last updated