개발/Vue

Vue 라우터

TTOLBE 2022. 4. 13. 15:04

Vue Router에 대해

Vue Router 설치

뷰 프로젝트가 있는 폴더를 열고

vue add router

커맨드를 입력하고 히스토리 사용 여부를 선택하자.

Vue Router 기초

기본으로 제공되는 Vue 페이지에 들어가면 상단에 'Home | About' 이라는 문구가 보일 것이다.

이제 프로젝터 폴더 안의 src/router/index.js 파일을 열어보자.

import Home from '../views/Home.vue';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
  },
  {
    path: '/about',
    name: 'About',

    component: () =>
      import( '../views/About.vue'),
  }
];

이러한 코드가 보일 것이다.

각각 설명하자면,

path라는 값은 웹에서 이동했을 때 웹페이지 뒤에 붙는 주소이다.

name은 라우터의 이름 값이다.

component는 라우터가 어떠한 파일로 이동하는지 선택한다.

component는 위 코드에서 볼 수 있듯, 파일 상단에서 임포트 할 수도 있고, 아니면 따로 임포트 함수를 쓸 수도 있다.

src 폴더의 App.vue 파일로 가보자.

    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>

이러한 코드가 보일 것이다. router-link 태그는 클릭했을때 웹의 특정주소로 가게 해준다.

그 밑의 <router-view/>라는 태그는 라우터의 해당 컴포넌트를 띄어주는 역할을 한다.

Router 컴포넌트 추가

예시로 Contact라는 컴포넌트를 추가해보자.

src/views 디렉토리로 가서 Contact.vue 라는 파일을 하나 생성하자.

<template>
  <div>
    <h1>This is the Contact Page</h1>
  </div>
</template>

여기서 template 이란 태그가 낯설텐데 template태그는 간단히 말하자면 Vue에서 Html 문법과 Js 함수식을 사용 할수 있게 해주는 역할을 한다고 한다.

위와 같이 파일을 생성 후 index.js로 가서 아래와 같이 임포트 해주자.

import Contact from '../views/Contact.vue'

그 뒤 routes 배열에 object를 하나 생성하자.

  {
    path: '/contact',
    name: 'Contact',
    component: Contact,
  },

생성후 App.vue로 가서 아래 구문을 타 router-link 태그밑에 추가해주자.

<router-link to="/contact">Contact</router-link>

로컬호스팅 서버로 들어가면 Contact라는 메뉴가 추가 되었고 클릭시 /contact로 이동하는 것을 볼 수 있다.

비동기 컴포넌트

비동기 컴포넌트(Lazy Load)란 페이지 방문시 컴포넌트가 로딩되는 방식이다.

기본적으로 Vue로 만든 프로그램은 App.js에 모든 컴포넌트들을 포함해 한번에 모두 로드한다.(이는 개발자모드에서 네트워크 메뉴로 들어갔을 떄 확인가능하다.) 이는 페이지 전환이 빠른 장점이 있지만 처음 들어갔을 때 로딩 시간이 지나치게 오래 걸릴 수도 있다. 이 때문에 컴포넌트의 크기가 지나치게 크면 문제가 생길수 있기 때문에 비동기 컴포넌트 방식을 사용하는 것이다.

위에서 임포트 방식이 두가지 있다고 했는데, 두번째방법으로 임포트 하는 것이 비동기 컴포넌트이다.

    component: () =>
      import( '../views/About.vue'),

상단에서 불러오는 방식으로 처리한 컴포넌트들은 메뉴를 클릭해도 따로 로드 되진 않지만 이처럼 임포트하면 About 메뉴를 클릭시 네트워크 항목에서 about 파일이 로딩되는 것을 볼 수 있다.

'개발 > Vue' 카테고리의 다른 글

Vue 렌더링  (0) 2022.04.17
Vue 데이터 바인딩-attribute/class/style  (0) 2022.04.16
Vue 데이터 바인딩-html/input/select  (0) 2022.04.16
Vue 컴포넌트 기초  (0) 2022.04.13
Vue 시작하기  (0) 2022.04.13