๋์ ๋ผ์ฐํ โ
๋ผ์ฐํฐ์ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ณดํต routes
์ต์
์ ํตํด ์ด๋ฃจ์ด์ง์ง๋ง, ์ด๋ค ์ํฉ์์๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ด๋ฏธ ์คํ ์ค์ผ ๋ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ณ ์ถ์ ์ ์์ต๋๋ค. Vue CLI UI์ ๊ฐ์ ํ์ฅ ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฅํ ์ ์์ต๋๋ค.
๋ผ์ฐํธ ์ถ๊ฐํ๊ธฐ โ
๋์ ๋ผ์ฐํ
์ ์ฃผ๋ก ๋ ๊ฐ์ง ํจ์์ธ router.addRoute()
์ router.removeRoute()
๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ์ด ํจ์๋ค์ ์ค์ง ์๋ก์ด ๋ผ์ฐํธ๋ฅผ ๋ฑ๋ก๋ง ํ๋ฉฐ, ์๋ก ์ถ๊ฐ๋ ๋ผ์ฐํธ๊ฐ ํ์ฌ ์์น์ ์ผ์นํ๋๋ผ๋ ์๋์ผ๋ก router.push()
๋ router.replace()
๋ฅผ ์ฌ์ฉํด ํด๋น ๋ผ์ฐํธ๋ฅผ ํ์ํด์ผ ํฉ๋๋ค. ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
๋ค์๊ณผ ๊ฐ์ด ํ๋์ ๋ผ์ฐํธ๋ง ์๋ ๋ผ์ฐํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค:
const router = createRouter({
history: createWebHistory(),
routes: [{ path: '/:articleName', component: Article }],
})
/about
, /store
, /3-tricks-to-improve-your-routing-code
์ ๊ฐ์ ์ด๋ค ํ์ด์ง๋ก ์ด๋ํด๋ Article
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ฉ๋๋ค. ๋ง์ฝ /about
์ ์์ ๋ ์๋ก์ด ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ค๋ฉด:
router.addRoute({ path: '/about', component: About })
ํ์ด์ง๋ ์ฌ์ ํ Article
์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ํ์ฌ ์์น๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ฐ๋ฆฌ๊ฐ ์๋ ์์น๋ฅผ ๋ฎ์ด์ฐ๋ ค๋ฉด(์๋ก์ด ํญ๋ชฉ์ ์ถ๊ฐํ์ฌ ํ์คํ ๋ฆฌ์ ๊ฐ์ ์์น๊ฐ ๋ ๋ฒ ์๊ธฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด) ์๋์ผ๋ก router.replace()
๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค:
router.addRoute({ path: '/about', component: About })
// this.$route ๋๋ useRoute()๋ ์ฌ์ฉํ ์ ์์ต๋๋ค
router.replace(router.currentRoute.value.fullPath)
์๋ก์ด ๋ผ์ฐํธ๊ฐ ํ์๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค๋ฉด await router.replace()
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด๋น๊ฒ์ด์ ๊ฐ๋ ๋ด์์ ๋ผ์ฐํธ ์ถ๊ฐํ๊ธฐ โ
๋ด๋น๊ฒ์ด์
๊ฐ๋ ๋ด์์ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด, router.replace()
๋ฅผ ํธ์ถํ์ง ๋ง๊ณ ์๋ก์ด ์์น๋ฅผ ๋ฐํํ์ฌ ๋ฆฌ๋๋ ์
์ ํธ๋ฆฌ๊ฑฐํด์ผ ํฉ๋๋ค:
router.beforeEach(to => {
if (!hasNecessaryRoute(to)) {
router.addRoute(generateRoute(to))
// ๋ฆฌ๋๋ ์
์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค
return to.fullPath
}
})
์ ์์๋ ๋ ๊ฐ์ง๋ฅผ ๊ฐ์ ํฉ๋๋ค: ์ฒซ์งธ, ์๋ก ์ถ๊ฐ๋ ๋ผ์ฐํธ ๋ ์ฝ๋๊ฐ to
์์น์ ์ผ์นํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ ๊ทผํ๋ ค๋ ์์น์๋ ๋ค๋ฅธ ์์น๊ฐ ๋๋ค๋ ์ ์
๋๋ค. ๋์งธ, hasNecessaryRoute()
๊ฐ ์๋ก์ด ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ ํ true
๋ฅผ ๋ฐํํ์ฌ ๋ฌดํ ๋ฆฌ๋๋ ์
์ ๋ฐฉ์งํ๋ค๋ ์ ์
๋๋ค.
๋ฆฌ๋๋ ์ ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์งํ ์ค์ธ ๋ด๋น๊ฒ์ด์ ์ ๋์ฒดํ๊ฒ ๋๋ฉฐ, ์์ ๋ณด์ฌ์ค ์์์ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค. ์ค์ ์ํฉ์์๋ ๋ผ์ฐํธ ์ถ๊ฐ๊ฐ ๋ด๋น๊ฒ์ด์ ๊ฐ๋ ์ธ๋ถ, ์๋ฅผ ๋ค์ด ๋ทฐ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ์๋ก์ด ๋ผ์ฐํธ๋ฅผ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
๋ผ์ฐํธ ์ ๊ฑฐํ๊ธฐ โ
๊ธฐ์กด ๋ผ์ฐํธ๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์๋ ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค:
์ด๋ฆ์ด ์ถฉ๋ํ๋ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ. ๊ธฐ์กด ๋ผ์ฐํธ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ฉด, ๋จผ์ ํด๋น ๋ผ์ฐํธ๋ฅผ ์ ๊ฑฐํ ํ ์ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค:
jsrouter.addRoute({ path: '/about', name: 'about', component: About }) // ์ด๋ฆ์ด ๊ฐ์ผ๋ฏ๋ก ์ด์ ์ ์ถ๊ฐ๋ ๋ผ์ฐํธ๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. // ๋ชจ๋ ๋ผ์ฐํธ์์ ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค. router.addRoute({ path: '/other', name: 'about', component: Other })
router.addRoute()
๊ฐ ๋ฐํํ๋ ์ฝ๋ฐฑ์ ํธ์ถํ๋ ๋ฐฉ๋ฒ:jsconst removeRoute = router.addRoute(routeRecord) removeRoute() // ๋ผ์ฐํธ๊ฐ ์กด์ฌํ๋ฉด ์ ๊ฑฐํฉ๋๋ค
๋ผ์ฐํธ์ ์ด๋ฆ์ด ์๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
router.removeRoute()
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ผ๋ก ๋ผ์ฐํธ๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ:jsrouter.addRoute({ path: '/about', name: 'about', component: About }) // ๋ผ์ฐํธ ์ ๊ฑฐ router.removeRoute('about')
์ด ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง๋ง ์ด๋ฆ ์ถฉ๋์ ํผํ๊ณ ์ถ๋ค๋ฉด ๋ผ์ฐํธ์ ์ด๋ฆ์
Symbol
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ผ์ฐํธ๊ฐ ์ ๊ฑฐ๋ ๋๋ง๋ค ํด๋น ๋ผ์ฐํธ์ ๋ชจ๋ ๋ณ์นญ๊ณผ ์์ ๋ผ์ฐํธ๋ ํจ๊ป ์ ๊ฑฐ๋ฉ๋๋ค.
์ค์ฒฉ ๋ผ์ฐํธ ์ถ๊ฐํ๊ธฐ โ
๊ธฐ์กด ๋ผ์ฐํธ์ ์ค์ฒฉ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด, router.addRoute()
์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๋ผ์ฐํธ์ ์ด๋ฆ ์ ์ ๋ฌํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด children
์ ํตํด ์ถ๊ฐํ ๊ฒ๊ณผ ๋์ผํ๊ฒ ๋ผ์ฐํธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค:
router.addRoute({ name: 'admin', path: '/admin', component: Admin })
router.addRoute('admin', { path: 'settings', component: AdminSettings })
์ด๋ ๋ค์๊ณผ ๋์ผํฉ๋๋ค:
router.addRoute({
name: 'admin',
path: '/admin',
component: Admin,
children: [{ path: 'settings', component: AdminSettings }],
})
๊ธฐ์กด ๋ผ์ฐํธ ํ์ธํ๊ธฐ โ
Vue Router๋ ๊ธฐ์กด ๋ผ์ฐํธ๋ฅผ ํ์ธํ ์ ์๋ ๋ ๊ฐ์ง ํจ์๋ฅผ ์ ๊ณตํฉ๋๋ค:
router.hasRoute()
: ๋ผ์ฐํธ๊ฐ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.router.getRoutes()
: ๋ชจ๋ ๋ผ์ฐํธ ๋ ์ฝ๋๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ๊ฐ์ ธ์ต๋๋ค.