현록

Vue 3 입문기

들어가며

Vue의 메인 버전이 3가 된지 꽤 됐다. 주로 Nuxt 환경에서 작업해왔기 때문에,
작성 당시에는 Nuxt 3가 RC 단계였고 실서비스에 바로 적용하기에는 조심스러웠다.
그래서 궁금하고 심심하던 참에 간단한 Todo Applink icon을 만들어봤다.

Custom Component event 관리하기

예전에는 단순히 $emit API로 이벤트를 발생시켜왔다보니
어느 이벤트가 발생할지 예측하기 어려워서 다소 관리하거나 명세하기 쉽지 않았다.

하지만 Vue 3에서 주로 다루는 Composition API에서는 이벤트들을 defineEmits를 통해 정의하여 관리할 수 있다.
defineEmits을 실행하면 주어지는 반환값으로 그대로 이벤트를 발생시킨다.

ex_screenshot
이벤트를 정의하고

ex_screenshot
그대로 반환되는 emit function으로 emit한다.

State 관리하기

Composition API에서는 refreactive를 사용해 상태를 반응형으로 만들 수 있다.
(어디서 많이 본 ...)

ref{ value: '값이 들어가는 곳' } 형태의 객체를 반환한다.
그리고 template 단에서 사용될 땐 .value를 직접 쓰지 않아도 값이 알아서 풀려서 바인딩 된다.
ex_screenshot

그리고 순수 JavaScript 객체일 줄 알았는데,
ref에는 reactivity를 위한 요소들도 함께 들어가 있었다. 그래서인지 ref.value가 수정되면 리렌더링이 발생했었다.
ex_screenshot

또 다른 방법으로는 reactive가 있다.
객체 자체를 반응형 proxy로 감싸기 때문에 Vue 2의 data 옵션과 비슷한 감각으로 사용할 수 있었다.
ex_screenshot

Ref와 Reactive의 차이점

간단한 Toy project를 진행하면서 느낀 가장 큰 차이점은

reactive는 객체나 배열을 proxy로 감싸기 때문에 Array.prototype.pushArray.prototype.pop 등의 method를 호출했을 때도 반응형으로 동작했다.
또한 nested property도 반응형으로 추적된다.

ref는 primitive 값에도 사용할 수 있고, 값을 읽거나 바꿀 때 .value를 통해 접근한다는 점이 다르다.
다만 객체나 배열을 ref에 넣어도 내부 값은 깊게 반응형으로 변환된다.
즉, ref에 배열을 넣었다고 해서 push, pop 같은 배열 method가 반응형으로 동작하지 않는 것은 아니었다.

어떤 것을 사용할까 ?

정답은 없는 것 같다.
다만, 개인적으로는 primitive 값이나 교체가 잦은 상태에는 ref, 여러 property를 가진 객체 상태에는 reactive가 더 자연스럽게 느껴졌다.

관련 포스트
marked renderer custom 하기 thumbnail
marked renderer custom 하기
현록을 개발하면서 티스토리에 있던 포스트들을 markdown으로 변환하여 올리고 있는데, 간혹 이미지 가로 사이즈가 viewport width보다 크면 overflow되는 현상이 있었습니다. 사실 css로 해결하였지만, styled-components 환경에서 nesting하는 것을 꺼리기도 하고, marked에서 직접 inline style을 넣는 방법이 궁금하기도 해서 찾아보았습니다.
가독성 있게 상수 넣기 thumbnail
가독성 있게 상수 넣기
오늘 회사 동료의 PR 리뷰 과정에서 좋은 기능을 공유해주셔서 TIL로 남겨봅니다. 아래와 같이 상수에 언더바(_)로 콤마처럼 구분을 시켜줄 수 있습니다. 앞으로 깔끔하고 좋은 코드를 작성하기 위해 자주 사용해야겠습니다 :)
TS에서 generic optional 하게 설정하기 thumbnail
TS에서 generic optional 하게 설정하기
오늘 next에서 `getStaticProps`와 `getLayout` 패턴을 함께 사용할 때, typescript generic을 넘겨주는 작업을 하고 있었는데, 기본값이 없다보니 기존 코드에 에러가 발생했었다. 이를 해결하기 위해 찾아보니 단순히 아래 예시처럼 `= {}`을 추가해주면 해결된다고 한다.
Backend에서 API Response가 snake_case인 경우엔? thumbnail
Backend에서 API Response가 snake_case인 경우엔?
안녕하세요. 프론트엔드 개발자의 경우, 가끔 백엔드의 API Response 값이 snake_case일 경우 어떻게 관리할지에 대해 고민에 빠지게 됩니다. 저도 오늘 같은 상황을 겪게 되었는데,  이번엔 네이밍 컨벤션을 맞춰주기로 했습니다. 컨벤션을 맞추는 데에는 여러가지 방법이 있겠지만, 고민 끝에 저는 axios의 interceptors를 통해 해결을 해보았습니다.
Promise 다루기 (feat. 병렬실행, 순차실행) thumbnail
Promise 다루기 (feat. 병렬실행, 순차실행)
오늘은 Promise를 통해 구문을 동기 처리 할 때, 여러 Promise들을 다루는 법을 소개해보겠습니다. Javscript를 작성하다 보면, 가끔 여러 Promise들을 다룰 때가 있습니다. 필자도 Nodejs 서버에서 동시에 여러 쿼리를 실행할 때 자주 마주쳤었는데요. 오늘은 어떻게 하면 Promise들을 유연하게 다룰 수 있는지 알아보겠습니다. 시작하기 앞서, 네 가지 Promise를 선언하고, 그들을 하나의 Array에 묶어보겠습니다.