라우팅을 하기위해라는 라이브러리를 설치하도록 하겠습니다. '@vaadin/router'
yarn add @vaadin/router'@vaadin/router'는 A CLIENT-SIDE ROUTER FOR WEB COMPONENTS, 웹 컴포넌트를 위한 클라이언트 사이드 라우터 입니다. 이전에는 'index.html'안에 웹 컴포넌트를 직접 불러와 사용하였지만 '@vaadin/router'를 사용하여 웹 컴포넌트를 교체하도록 하겠습니다.
'index.html'에
<main>
컴포넌트를 만들도록 하겠습니다.index.html
<body>
<main></main>
<script src="/vendor/webcomponents-loader.js"></script>
</body>
<main>
태그를 라우터로 만들어 내부에 웹 컴포넌트를 불러오도록 하겠습니다.index.ts
import "./styles/styles.css";
import "./pages/lit-tomato";
import { Router } from "@vaadin/router";
import { component$ } from '@builder.io/qwik';
window.addEventListener("load", () => {
initRouter();
});
function initRouter() {
const router = new Router(document.querySelector("main"));
router.setRoutes([
{
path: "/",
component: "lit-tomato",
},
]);
}
<main>
태그를 불러와 경로가 "/"라면 'lit-tomato' 컴포넌트 불러오도록 설정하였습니다. 'lit-tomao'를 사용하기 위해 import를 해주었는네, 이를 다음과 같은 방식으로 경로가 변경될 때 불러 올 수 있습니다.function initRouter() {
const router = new Router(document.querySelector("main"));
router.setRoutes([
{
path: "/",
component: "lit-tomato",
},
{
path: "/lit-potato",
component: "lit-potato",
action: () => {
import("./pages/lit-potato");
},
},
]);
}
<main>
태그 안에 렌더링 된 것을 확인 할수 있었습니다.이번에는 depth가 있는 경로를 가진 컴포넌트를 다뤄보겠습니다. 경로가 '/vegetable/lit-tomato'라면 어떻게 만들어야 할까요?간단하게 path를 경로와 맞게 설정해주면 됩니다.
{
path: "/vegetable/lit-tomato",
component: "lit-tomato",
},
{
path: "/vegetable",
component: "lit-tomato",
children: [{ path: "/lit-tomato", component: "lit-tomato" }],
},
동적라우팅
동적 경로를 설정하는 것 또한 간단합니다. 전달받을 query를 :를 사용하여 동적페이지를 만들 수 있습닏다.{
path: "/vegetable/:name",
component: "lit-tomato",
},