Week 8. Vue Router 기초
Vue router를 이용하면 SPA를 손쉽게 구현 가능하다.
npm i vue-router@next
Vue 3 버전에 맞춰 vue-router도 next(4버전)로 설치.
// root js
import { createApp } from 'vue'
import App from '~/App.vue'
import router from '~/routes' // routes 폴더안의 index.js 불러오기
const app = createApp(App)
app.use(router) // router 등록
app.mount('.app')
형태: 도메인/#/~~
#
를 통해 페이지를 구분하지만 요청을 보내지 않음.장점
: 서버에 요청을 최소화함.단점
:import { createRouter, createWebHashHistory } from 'vue-router'
export default createRouter({
history: createWebHashHistory() // hash mode로 사용
routes: [
{
path: __,
name: ___, // $router.push({ name: }) 형태로 라우팅 가능
component: __ // 컴포넌트 등록
children: [
{},
]
}
]
})
{
path: '/경로/:등록할 파라미터'
}
$route.params.등록한 파라미터
형태
: 도메인/~~
장점
: 검색 엔진 최적화 유리단점
: 기본적인 도메인을 사용하므로 서버에 매번 요청 전송 가능성.⚠️ HTML5 mode를 사용하기 위해 번들러 설정을 해줘야 함
module.exports = {
output: {
publicPath: '/' // 도메인 주소에서 절대 경로로 접근하도록
},
devServer: { // 배포하는 서버에 옵션을 추가해야 함.
historyApiFallback: true // index.html로 fallback
}
}
publicPath: '/'
historyApiFallback: true
⚠️ 현재는 local에서 개발하므로 devServer
에 옵션을 추가했지만,
배포하는 서버에 옵션을 추가해줘야 함!!
라우팅이 일어나기 전에 보호하는 로직 설정
router.beforeEach((to, from) => {
return {
path: ,
query: { redirect: to.fullPath } // redirect 쿼리 스트링에 사용자가 원래 접근하려했던 페이지 정보를 담아 보내줌
}
})
before Guards와 동일하지만, 순서에 차이 🙆♀️
컴포넌트 내부에서 사용하는 가드들
⚠️ 되도록이면 권장하지 않음! 가드를 추적하기 힘들어짐
beforeRouteEnter
: 해당 경로에 접속하기 직전 실행beforeRouteUpdate
: 현재 컴포넌트가 사용하는 라우트가 변경됐을 때 beforeRouteLeave
: 해당 경로를 떠나기 직전 실행검증이 다 끝나고 제일 마지막에 실행되는 훅
라우트별로 guard 추가
beforeEnter: ((to, from) => )
beforeRouteLeave
(비활성화될 컴포넌트가 있을 때 실행됨)beforeEach
실행In-Component Guards
실행beforeResolve
afterEach
const routes = [
{
meta: { requireAuth: true } // 인증이 필수인 페이지라 명시 (단순 정보)
}
]
우... 라우팅은 언제나 헷갈린다
navigation guards로 라우팅되기 전에 가드할 로직을 설정할 수 있는데
요게 뭔가 와닿지가 않는다!!!
노션 클로닝 하면서 익숙해져야겠다