똑같은 삽질은 2번 하지 말자
Can I use ... Vue 3? (컨퍼런스 발표 내용) 본문
개요
Can I use ... Vue3 의 컨퍼런스를 시청하고 메모해두고 싶은 내용들을 정리해 보았다.
Vue 3 의 특징
- 강화된 타입스크립트 지원
- 코드 재사용을 위한 Composition API(Optional 써도되고 안써도되고)
- 그외 https://heewon26.tistory.com/258 참고
실무자의 관점의 Vue 3
이미 운영중인 서비스와 IE가 필요한 사이트는 Vue2로(IE는 2022년 6월 서비스 종료)
입문자의 고민
Vue2로 배워도 문제 없다
실무자의 고민
Vue 3를 써보고 싶은데,,,ㅠ 어떻게 해야 하나요?
Vue 2의 @vue/composition-api + Typescript를 써보자
@vue/composition-api 란?
- Vue 2에서 컴포넌트의 재사용 가능 로직을 작성할 수 있도록 도와주는 라이브러리
- 함수 기반의 API 작성 방식 기능으로 타입스크립트 추론 이점 극대화
- 데이터, 로직 목적별로 관심사 분리 가능
- 리액트 훅의 방식을 채택하여 뒤늦게 나온 만큼 몇 가지 단점을 보완
- 분기문, 반복문 중첩 함수 내에서 사용가능
- 컴포넌트 생성 주기에 따라 최초에 한번만 실행
함수 기반의 API 작성 방식 기능(확실히 상당한 이점을 느낀부분 믹스인을 갖다 버릴수 있겠다)
composable/useModal.js
import { ref } from '@vue/composition-api'
const useModal = () => {
const isModalOpen = ref(false)
const openModal = () => {
isModalOpen.value = true
}
return {
isModalOpen
openModal
}
}
App.vue
<template>
<form @submit.prevent="submitForm">
<input type="text">
<button type="submit">Login</button>
<p>modal is {{ isModalOpen ? 'open' : 'closed' }}</p>
</form>
</template>
<script>
import * as useModal from './composable/useModal.js'
export default {
setup() {
return { ...useModal() }
}
methods:
async submitForm() {
// await loginUser();
this.openModal();
},
}
}
</script>
@vue/composition-api 사용시 주의 사항
- 기존의 믹스인과 HOC를 이용한 코드 재활용 방식은 가급적 지양(위와 같이 composable처럼 작성하는걸 지향)
- 타입스크립트와 같이 사용했을 때 효과 상승
- 훅에서 정의한 파일을 컴포넌트 안에서 재선언 했을 때 덮어쓰는 실수를 피할 수 있음
- reactive 보다는 ref 지향 (객체에 nested 하는 형태로 reative를 사용하는 데 이게 디버깅이 어렵다?)
- Vue 3에서 제공되는 API가 모두 지원되지는 않음
Vue 2의 타입스크립트 지원
- 클래스 문법보다는 Vue.extend()를 이용한 객체 문법 지향
- TS 설정 파일에 noImplicitThis: true 옵션 추가
- computed 속성 반환 타입은 꼭 정의
- 스토어 및 기타 타입 정의는 d.ts 파일에 정의
Vue 3 언제 쓰면 좋을까?
- 코어 및 커뮤니티 라이브러리 생태계가 충분히 성숙해 졌을 때
- 아마다 IE 지원이 끝나는 2022년 하반기 이후
- 사용자 층과 브라우저를 선택할 수 있는 어드민(internal site)을 개발할 때
발표자료 만들때 활용하면 좋을꺼같은?
'Vue' 카테고리의 다른 글
Vue + Firebase + Cloud Functions의 Staging / Production 환경 구축 (0) | 2022.04.23 |
---|---|
Nuxt(SPA) + Firebase 에서 Google Tag Manager를 이용해 page_view 이벤트를 커스텀해보기 (0) | 2022.04.09 |
[vue-decorator-property] @Prop의 ?: 와 !: 의미 feat. typescript) (0) | 2022.01.27 |
Nuxt에서 Global로 scss의 변수($)나 @mixin을 설정하기 (0) | 2022.01.23 |
Nuxt에서 @nuxjs/dotenv 없이 .env 파일 환경변수 셋팅하기 (0) | 2022.01.09 |
Comments