처음부터 시작하는 Java
  • Vue Router - 동적 라우트 매칭과 파라미터
    2024년 05월 31일 18시 10분 30초에 업로드 된 글입니다.
    작성자: 원2
    728x90
    반응형

    Vue Router는 Vue.js 의 공식 라우터

    Vue 코어와 긴밀하게 통합되어 싱글 페이지 앱을 쉽게 만들 수 있음

    기능

    • 중첩된 라우트 매핑
    • 동적 라우팅
    • 모듈식 컴포넌트 기반의 라우터 설정
    • 라우트에 파라미터, 쿼리, 와일드카드 적용
    • Vue.js의 트랜지션 시스템을 사용한 트랜지션 효과
    • 라우트 탐색을 세밀하게 컨트롤
    • 링크에 자동으로 엑티브 CSS 클래스 적용
    • HTML5 히스토리 모드 또는 해시 모드
    • 커스텀 스크롤 동작
    • URL에 대한 적절한 인코딩

     

    설치

    기존 프로젝트가 있을 시 자신이 사용하는걸로 ㄱ

    npm install vue-router@4
    
    
    yarn add vue-router@4
    
    
    pnpm add vue-router@4

     

     

    동적 라우트 매칭과 파라미터

     

    주어진 패턴에 따라 같은 컴포넌트에 라우트를 매핑 해야 될 때

    예를 들어 모든 사용자에 대해 다른 사용자 ID 로 렌더링되어야 하는 UserView 컴포넌트가 있다고 설정하고

    Vue Router에서는 경로에 동적 세그먼트를 사용할 수 있다. -> 파라미터

     

    router.js

    import User from './UserView.vue'
    
    // 이것들은 `createRouter`에 전달
    const routes = [
      // 동적 세그먼트는 콜론으로 시작
      { path: '/users/:id', component: UserView },
    ]

    이렇게 하면 /users/testMan   /users/souj  가 같은 라우트로 매핑됨

    - 파라미터는 콜론 ( : ) 으로 표기하고 모든 컴포넌트에서 route.params로 노출됨

     

     

    UserView.js

    -> 요청을 /users/testMan 으로 요청 시 객체로 id 값이 testMan으로 들어온다

    <script setup>
    
    import {useRoute} from "vue-router";
    import {watch} from "vue";
    
    const route = useRoute()
    
    const test = route.params.id
    
    console.log(test) // result : testMan
    
    
    </script>
    
    <template>
    
      <div class="users">
        <h1>User : {{ test }}</h1>
      </div>
    
    </template>
    
    <style scoped>
    
    </style>

     

     

    파라미터 변경에 반응하기

     

    파라미터가 있는 라우트를 사용할 때 주의할 점은 사용자가 /users/testMan  ->  /users/souj 으로 이동할 때

    동일한 컴포넌트 인스턴스가 재사용된다는 것 -> 같은 컴포넌트 이기에 인스턴스를 파괴하고 새것을 생성하는 것 보다 효율적이지만 컴포넌트의 생명주기 훅이 호출되지 않는다는 것을 의미함

     

    같은 컴포넌트에서 파라미터 변경에 반응하려면 route 객체에서 route.params 를 감시

    <script setup>
    import { watch } from 'vue'
    import { useRoute } from 'vue-router'
    
    const route = useRoute()
    
    watch(() => route.params.id, (newId, oldId) => {
      // 라우트 변경에 반응합니다...
    })
    </script>

    또는 beforeRouteUpdate 탐색 가드를 사용해서 탐색을 취소 할 수도 있음

     

    <script setup>
    import { onBeforeRouteUpdate } from 'vue-router'
    // ...
    
    onBeforeRouteUpdate(async (to, from) => {
      // 라우트 변경에 반응합니다...
      userData.value = await fetchUser(to.params.id)
    })
    </script>

     

     

    모두 예외 처리 / 404 찾을 수 없음 라우트

     

    일반 파라미터는 URL 프래그먼트 사이에 있는 문자만 일치시키는데

    아무거나 일치시키고 싶다면 , 파라미터 뒤에 괄호 안에 정규식을 추가하여 사용자 지정 파라미터 regexp 를 사용

    const routes = [
      // 모든 것을 일치시키고 `route.params.pathMatch` 아래에 넣을 것입니다
      { path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },
      // `/user-`로 시작하는 모든 것을 일치시키고 `route.params.afterUser` 아래에 넣을 것입니다
      { path: '/user-:afterUser(.*)', component: UserGeneric },
    ]

    pathMatch 파라미터를 반복 가능하게 

    router.push({
      name: 'NotFound',
      // 현재 경로를 유지하고 첫 번째 문자를 제거하여 타겟 URL이 `//`로 시작하지 않도록 합니다
      params: { pathMatch: route.path.substring(1).split('/') },
      // 존재하는 쿼리와 해시를 유지합니다
      query: route.query,
      hash: route.hash,
    })
    728x90
    반응형

    'JS F- > Vue' 카테고리의 다른 글

    프로그래밍 방식 탐색  (0) 2024.05.31
    중첩된 라우트  (0) 2024.05.31
    이름이 있는 라우트  (0) 2024.05.31
    Vue 라우터  (0) 2024.05.30
    컴포넌트 기초  (0) 2024.05.29
    템플릿 참조  (0) 2024.05.29
    댓글