๋ทฐ ๋ผ์ฐํฐ๋?
ํ์ด์ง ๊ฐ์ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ URI์ ๋ฐ๋ผ ํน์ ์ปดํฌ๋ํธ๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด๋ฒ ํฌ์คํธ์์๋ ๋ทฐ ๋ผ์ฐํฐ๋ฅผ ์ค์นํ๊ณ , ๋ผ์ฐํฐ ์ค๊ณ, ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ฑฐ๋ค. Vue3 ๋ฒ์ ํ๋ก์ ํธ๋ผ๋ ๊ฒ์ ๋ช ์ํ๋ค!
[version] vue: 3.2.33 / vue-cli: 5.0.4
๋ทฐ๋ผ์ฐํฐ ์ค์น
npm i vue-router@next --save
vue-cli๋ฅผ ํตํด ๋ทฐ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ํ, ์์ ์ฝ๋๋๋ก npm์ ํตํด์ ๋ทฐ๋ผ์ฐํฐ๋ฅผ ์ค์นํด์ค๋ค.
๋ทฐ๋ผ์ฐํฐ ์ค์น ํ์ธ
์ค์น๊ฐ ์๋ฃ๋๋ฉด ๋ทฐ ํ๋ก์ ํธ ์ต์๋จ์ ๊ฒฝ๋ก์ ์๋ package.json ํ์ผ์์ dependencies์ vue-router๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ๋ค. ํ์ฌ ์ต์ ๋ฒ์ ์ธ 4๋ฒ์ ์ด ์ค์น๋์๋ค.
๋ทฐ๋ผ์ฐํฐ ์ค๊ณ ๋ฐ ์์ฑ
src์๋ routerํด๋๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ index.jsํ์ผ์ ๋ง๋ค์ด์ค๋ค. ์ด ํ์ผ์์๋ ๋ฏธ๋ฆฌ ์์ฑํด์ค ๋ทฐ ์ปดํฌ๋ํธ๋ค์ ๋ถ๋ฌ์ ํน์ uri์ ์ฐ๊ฒฐํด์ฃผ๋ ๋ผ์ฐํฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํ๋ค.
src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
// ์ฐ๊ฒฐํ ๊ฐ ์ปดํฌ๋ํธ import (src/viewsํด๋ ์๋ ์ปดํฌ๋ํธ๋ค ์์ฑํด๋ )
import FirstView from '../views/FirstView'
import SecondView from '../views/SecondView'
import ThirdView from '../views/ThirdView'
// ๋ผ์ฐํฐ ์ค๊ณ
const routes = [
{ path: '/1', component:FirstView},
{ path: '/2', component:SecondView},
{ path: '/3', component:ThirdView}
]
// ๋ผ์ฐํฐ ์์ฑ
const router = createRouter({
history: createWebHistory(),
routes
});
// ๋ผ์ฐํฐ ์ถ์ถ (main.js์์ import)
export {router}
vue3์์๋ถํฐ๋ createRouter( )ํจ์๋ฅผ ์ด์ฉํด ๋ผ์ฐํฐ๋ฅผ ์์ฑํด์ฃผ๋๋ฐ, ์ธ์๋ก๋ history์ routes๋ฅผ ๋๊ฒจ์ค๋ค. routes์ ๊ฒฝ๋ก(URI|URL)์ ์ปดํฌ๋ํธ๋ค์ ๊ฐ์ฒด๋ก ๋ฌถ์ด ๋งคํํด์ค๋ค. (์ฝ๋ ๋๋ฌ์์ง๋๊น ์์์ ๋ฐฐ์ด๋ก ์์ฑํด๋ ) ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์์ฑํ ๋ผ์ฐํฐ๋ฅผ exportํ์ฌ main.js์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
๋ทฐ๋ผ์ฐํฐ ์ฌ์ฉ
๋ทฐ๋ผ์ฐํฐ์ ์ฌ์ฉ์ main.js์์ use๋ฅผ ํตํด ํ ์ ์๋ค. ๋ฉ์ธ ๋ทฐํ์ผ์ ํ ํ๋ฆฟ์๋ <router-view>ํ๊ทธ๋ฅผ ํตํด ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ์ฌ ์ ์๊ฒ ํ๋ค.
src/main.js
import { createApp } from 'vue'
import App from './App.vue'
// ์์ฑํ ๋ทฐ ๋ผ์ฐํฐ ๋ฐ์์ค๊ธฐ
import { router } from './router/index.js'
const app = createApp(App)
app.use(router) // ๋ผ์ฐํฐ ์ฌ์ฉ
app.mount('#app')
src/App.vue
<template>
<div id="app">
<!-- uri์ ๋ฐ๋ผ ํด๋น ์ปดํฌ๋ํธ๊ฐ router-view๋ฅผ ๋์ ํจ -->
<router-view></router-view>
</div>
</template>
...
๊ฒฐ๊ณผ ํ์ธ
https://router.vuejs.โorg/guide/#javascript
'๐ FrontEnd > ๐ Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฑ ๊ฐํผ (0) | 2022.05.19 |
---|