Vue에서 라우팅을 구현하는 세 가지 방법

✍🏼 작성일 2016년 06월 12일   
❗️ 참고: 이 글이 작성된 지 이미 일이 지났습니다. 시의성에 유의하세요

서문

Vue 학습 정리가 거의 마무리되었으며, 이제는 다른 잡다한 지식을 보충할 예정입니다. 오늘은 Vue Router의 세 가지 구현 방식에 대해 설명하겠습니다.

프로젝트 전체 코드 보기 (이 프로젝트에는 Vue Plugin 등의 다른 Vue 테스트 코드도 포함되어 있습니다)

render 함수를 통한 구현

기본적인 아이디어는 render 함수가 주소창의 경로를 기반으로 컴포넌트 내용을 렌더링하는 것입니다. HTML5의 history.pushState 사용과 popstate 이벤트 감지를 결합하면 직접 주소 접근/브라우저 뒤로 가기 및 앞으로 가기/링크 클릭 이동 등의 라우팅 기능을 구현할 수 있습니다.

장점:

  1. 존재하지 않는 주소를 404.vue 페이지로 리다이렉트할 수 있습니다.

단점:

  1. HTML5의 history.pushState API를 지원하지 않는 브라우저에서는 폴리필을 사용할 수 없습니다.
  2. render 함수의 렌더링 결과를 캐시할 수 없습니다.

참고: 트랜지션 애니메이션 효과를 사용하는 경우, 루트 요소는 default.vue에 존재합니다. 코드 상의 차이점을 유의하세요.

구체적인 코드 확인

component의 is 속성을 통한 구현

사실 원리는 위와 동일하지만, render 함수 대신 component를 사용합니다.

component에는 is 속성이 있어 어떤 템플릿을 로드할지 지정할 수 있습니다. 이 속성은 주소창의 경로를 기반으로 동적으로 설정할 수 있습니다.

장점:

  1. component에 keep-alive 속성을 추가하여 캐시할 수 있어 render 함수보다 효율적입니다.

단점:

  1. HTML5의 history.pushState API를 지원하지 않는 브라우저에서는 폴리필을 사용할 수 없습니다.
  2. 존재하지 않는 라우트 주소(예: 404 등)를 렌더링할 수 없습니다(따라서 이 데모에는 위와 같은 404.vue가 없습니다).

참고: 트랜지션 애니메이션 효과를 사용하는 경우, 루트 요소는 tpl.html에 존재합니다. 코드 상의 차이점을 유의하세요.

구체적인 코드 확인

VueRouter 플러그인을 통한 구현

VueRouter는 공식 플러그인으로, 모든 요구 사항을 완벽하게 구현합니다.

장점:

  1. 필요한 모든 기능을 갖추고 있습니다.

단점:

  1. pushState를 폴리필하기 위해 경로 뒤에 #을 추가하여 라우팅 기능을 구현하지만, 실제로는 진정한 라우팅이 아닌 해시 값 변경에 불과합니다.

구체적인 코드 확인

- EOF -
이 글의 최초 게시: Vue에서 라우팅을 구현하는 세 가지 방법 - Xheldon Blog