포스트

Router

Router

Router

Routing

네크워크에서 경로 선택 프로세스, 웹 어플리케이션에서 다른 페이지간의 전환과 경로 관리 기술

Routing 기술이 없다면?

  • 유저가 URL을 통한 페이지 변환 감지 못함
  • 브라우저 뒤로 가기 기능 사용 불가
  • 페이지가 무엇을 렌더린 중인지 알 수 없음

Vue Router

1
<RouterLink to="/">Home</RouterLink>
  • 페이지 다시 로드하지 않고 URL 생성 및 관련 로직 처리
1
2
3
4
5
6
7
8
      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/about">About</RouterLink>
      </nav>
    </div>
  </header>

  <RouterView />
  • URL에 해당하는 컴포넌트를 표시
  • router/index.js : 라우팅과 관련된 정보 및 설정 작성 되는 곳

Untitled

  • 일반 컴포넌트와 구분하기 위해 컴포넌트 이름을 View로 끝나도록 작성하는걸 권장함

라우팅 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
const router = createRouter({
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomeView
    },
  ...

  <nav>
    <RouterLink to="/">Home</RouterLink>
    <RouterLink to="/about">About</RouterLink>
  </nav>
  • index.js에 라우터 관련 설정 작성
  • RouterLink의 to 속성으로 index.js에서 정의한 주소 속성 값을 사용
1
2
3
4
 <nav>
    <RouterLink to="{ name : 'home' }">Home</RouterLink>
    <RouterLink to="{ name : 'about' }">About</RouterLink>
  </nav>
  • 하드 코딩된 URL을 사용하지 않아도 된다.
  • URL 입력 시 오타 방지

동적 경로 매칭

  • 사용자 ID를 활용한 페이지 설계시 URL은?
    • user/1
    • user/2
    • 무한 반복
  • 매개변수 : 로 표기

    1
    2
    3
    4
    5
    6
    7
    
      const router = createRouter({
        routes: [
          {
            path: '/user/:id',
            name: 'user',
            component: UserView
          },
    
    1
    2
    3
    4
    
      <h1>UserView</h1>
      <h2>번 User 페이지
        
      const userId = ref(route.params.id)
    

    로 호출 가능

Router Navigation

  • 다른 위치로 이동하기
    • router.push()
  • 현재 위치 바꾸기
    • router.replace()

router.push()

  • 다른 URL로 이동하는 메서드
  • 새 항목을 push하므로 사용자가 브라우저 뒤로가기 버튼을 클릭하면 이전 URL로 이동 가능
  • RouterLink를 클릭했을 때 router.push() 을 호출하는 것과 같음

router.replace()

  • push와 달리 history stack에 push하는게 아니라 다른 URL로 이동

router.beforeEach

1
2
3
4
5
6
7
8
9
beforeEnter: (to, from, next) => {
        const userId = to.params.userId;
        // userId가 "admin"이 아니면 UserView로의 접근을 금지합니다.
        if (userId !== 'admin') {
          next({ name: 'home' }); // 홈 페이지로 리디렉션합니다.
        } else {
          next(); // 계속 진행합니다.
        }
      }
  • to : 이동 할 URL 정보가 담긴 Route 객체
  • from : 현재 URL 정보가 담긴 Route 객체
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.