Aaron[에런]/주절주절

Vue의 신기한 점 (feat. 동적 컴포넌트, 텔레포트)

Aaron-Kim 2024. 3. 11. 11:45

[Vue 살펴보면서 신기한점] - 동적 컴포넌트(Vue 2 이상)와 텔레포트(Vue 3 이상)

  • 예시 1) 탭에 여러 버튼이 있고 각 버튼은 서로 다른 컴포넌트를 보여줌
    selectedTab 데이터와 v-if를 이용해서 처리가능하지만 v-if 반복 성가심 → component 태그 이용
    • component 태그의 is 속성
    • 컴포넌트 바꿀 때 이전 컴포넌트는 DOM에서 제거됨
      → keep-alive 래퍼 컴포넌트 이용하여 컴포넌트를 완전히 제거하지 않고 상태를 내부에서 캐시로 저장하도록 Vue에 알려줌
  • 예시 2) dialog 태그와 open 속성을 이용해서 만든 커스텀 오버레이 - 모달
    → HTML Semantic/접근성 관점에서 모달 컴포넌트를 컴포넌트의 depth 깊이 위치시키는 것은 좋지 않음
    전체 페이지에 오버레이되는 문제 발생 가능, 접근성/스타일링 side effect 발생 가능 ⇒ HTML root에 위치시켜야 함!
    • 텔레포트로 요소 쉽게 옮길 수 있음 (작은 최적화 방식)
    • 탤레포트는 컴포넌트의 계층을 유지하면서 DOM의 구조를 조작하고 DOM에 추가되는 부분을 제어하기 위해 사용되는 또 다른 내장 컴포넌트
    • to 속성 필요 (css selector)

teleport는 react-portal과 비슷한 것으로 보이고,
keep-alive/component는 react에서 조건 분기로 엘리먼트 처리에 대한건데 캐싱은 좋네요

 

참고) Vue 공식 스타일 가이드

반응형