[Solid] Solid-Router: 페이지 라우팅 설정하기

2025. 2. 8. 02:30·Frontend/SolidJS

Solid-Router는 React Router를 기반으로 한 패키지로,

 

DOM 구조에서 URL 주소를 기반으로 한 페이지 전환을 위해 설계된 패키지입니다.

 

이를 통해 Solid에서 여러 개의 페이지를 가진 DOM 구조를 구현할 수 있습니다.

 

Solid-Router의 컴포넌트들은 아래와 같이 호출할 수 있습니다.

import { A, HashRouter, MemoryRouter, Navigate, Route, Router } from "@solidjs/router";

1. Router & HashRouter

라우팅을 구성하는 최상단 컴포넌트입니다.

 

Route들을 포함하는 wrapper역할을 합니다.

<Router>
	{/* routes */}
</Router>

만약 URL에 해시값이 포함되어 있다면, HashRouter를 사용합니다.

<HashRouter>
	{/* routes */}
</HashRouter>

 

2. Route

각 URI 주소와 대응될 페이지를 지정합니다.

 

페이지는 컴포넌트 형식으로 넘겨주며, 서로 다른 URI 주소가 같은 컴포넌트를 가리킬 수 있습니다.

 

기본 URI 주소는 '/' 입니다.

<Route path="/" component={MainPage} /> {/* 한 개 페이지 */}
<Route path={["/login", "/register"]} component={Login} /> {/* 두 개 이상의 페이지 */}

3. MemoryRouter

브라우저의 페이지 방문 기록을 저장하고자 할 때 사용합니다.

 

<Router>의 경우 브라우저가 이를 기록하며, <HashRouter>의 경우 URL에 해시값으로 기록됩니다.

 

반면 <MemoryRouter>는 createMemoryHistory( ) 메소드를 이용하여 사용자가 직접 저장할 수 있습니다.

export default function App() {
  const history = createMemoryHistory();
  
  // set() : 각 페이지로 이동하면서 history 값을 갱신합니다
  const toHome = () => {
    history.set({ value: "/" });
  };
  
  const toAbout = () => {
    history.set({ value: "/about" });
  };
  
  return (
    <>
      <button onClick={toHome}>{'"/"'}</button>
      <button onClick={toAbout}>{'"/about"'}</button>
      
      {/* 저장된 history값은 MemoryRouter로 넘겨집니다 */}
      <MemoryRouter
        history={history}
        root={(props) => <Suspense>{props.children}</Suspense>}
      >
        {/*... routes */}
      </MemoryRouter>
    </>
  );
}

생성한 history 객체는 다음과 같이 조작할 수 있습니다.

get 현재 경로 저장 forward 앞으로 가기
set 지정한 경로로 이동 후 저장 go n번 앞으로/뒤로 가
back 뒤로가기 listen callback 함수 추가

4. A

<a> 태그에 대한 wrapper로 동작합니다. 하이퍼링크로써 <a>와 기능은 같지만, 몇가지 추가 기능이 있습니다.

Base path 제공

<a>는 기본적으로 현재 위치한 url 경로를 root로 하여 경로를 처리합니다.

 

예를 들어 아래와 같은 경우 <a>가 "/home"에 위치해 있다면, 링크는 "/home/link1"을 가리키게 됩니다.

<a href="/link1">link1</a>

여기에 <A>는 추가로 base path로도 경로를 지정할 수 있습니다.

 

Base path는 상위 Router에서 base="/subpath"와 같이 지정할 수 있습니다.

 

이 경우  <A>가 "/home" 위치에 있더라도, 링크는 "/subpath/link1"을 가리키게 됩니다.

<Router base="/subpath">
    <A href="/link1">link1</A>
</Router>

Active Class

<A>는 만약 href의 경로가 현재 경로와 같다면 active class값을, 다르면 inactive class값을 반환합니다.

 

이를 통해 현재 페이지와 일치하는 링크에 스타일을 쉽게 적용할 수 있습니다.

 

하위 경로를 무시하기 때문에, 현재 위치가 "/a/b"이고 href="/a"이어도 class값은 active가 됩니다.

5. Navigate

<A>와 유사한 역할은 합니다. 단, Navigate는 해당 경로에 위치한 컴포넌트가 렌더링되는 즉시 이동합니다.

 

또한 href가 대상 경로를 받지 않고, 대상 경로를 반환하는 함수를 받습니다.

function getPath({ navigate, location }) {
  // navigate : useNavigate()의 반환값을 받을 변수;
  // location : useLocation()의 반환값을 받을 변수.
  return "/some-path";
}

// ...
<Navigate href={getPath} />

 

각 컴포넌트가 지니는 prop과 자세한 설명은 아래 공식 문서에서 확인할 수 있습니다.

https://docs.solidjs.com/solid-router/reference/components/route

 

Route - SolidDocs

Multiple paths Routes support defining multiple paths using an array. This is useful for when you want a route to remain mounted and not re-render when switching between two or more locations that it matches: This would mean navigating from /login to /regi

docs.solidjs.com

 

728x90

'Frontend > SolidJS' 카테고리의 다른 글

[Solid] 페이지 라우팅 설정하기  (0) 2025.02.08
[Solid] Solid-Meta: 메타데이터 다루기  (0) 2025.02.08
[Solid] Syntax | 13. Resource  (0) 2025.01.31
[Solid] Solid Start에 대해서  (0) 2024.07.09
[Solid][CSS] SolidJS에서 macaron 사용하기  (0) 2024.07.01
'Frontend/SolidJS' 카테고리의 다른 글
  • [Solid] 페이지 라우팅 설정하기
  • [Solid] Solid-Meta: 메타데이터 다루기
  • [Solid] Syntax | 13. Resource
  • [Solid] Solid Start에 대해서
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    PyTorch
    ts
    CSS
    API
    figma
    DB
    SOLID
    backend
    GAN
    deploy
    CV
    Git
    PRISMA
    expo
    postgresql
    CS
    vscode
    mongo
    review
    Three
    nodejs
    python
    ML
    ps
    Express
    js
    modal
    ReactNative
    frontend
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[Solid] Solid-Router: 페이지 라우팅 설정하기
상단으로

티스토리툴바