September 02, 2021
ROUTER에 대해 학습하기 전 SSR과 CSR에 대해 간략하게 알고 넘어가자! SSR과 CSR은 페이지와 관련이 깊다. 페이지의 구조를 담당하는 HTML 파일을 어느 위치에서 생성할 것인지에 따라 SSR과 CSR로 나뉘게 된다.
SSR은 사용자가 서버에게 페이지 리소스를 요청하면, 서버는 요청에 해당하는 HTML 파일을 생성하여 전송한다.
첫 페이지 렌더링은 일반적으로 CSR보다 빠르다.
CSR은 초기에 최소한의 코드를 포함한 HTML을 전송 받은 후, JS 파일을 통해 HTML의 메인 코드들을 동적으로 생성합니다.
클라이언트 사이드에서 라우팅하기 위한 라이브러리로 react-router-dom을 사용할 수 있다.
Switch: 첫번째로 매칭되는 Route만 렌더링 되도록 하는 도구
(switch가 없다면 루트 경로로 이동하고자 하는 경우 ”/“를 포함한 Route가 모두 렌더링 되는 문제가 발생한다. 아래 예시의 exact를 기입했음에도 dashboard, products, landing이 모두 렌더링 됨.)
import {
BrowserRouter as Router,
Route,
Switch,
Redirect,
} from 'react-router-dom';
import { Landing, Products, Dashboard } from 'pages';
import { Header, Footer } from 'containers';
export default function WireframeApp() {
return (
<Router>
<Switch>
<Route exact path="/" component={Landing} />
<Route path="/dashboard" component={Dashboard} />
<Route path="/products" component={Products} />
<Redirect to="/landing" />
</Switch>
</Router>
);
}리엑트의 경우 Link 컴포넌트를 통해 경로를 이동시킬 수 있다.
이 때, Link는 Router 컴포넌트 내에서만 사용할 수 있기 때문에, Link 컴포넌트를 테스트하고 싶은 경우, decorator를 사용하여 Router를 감싸 줄 수 있다.
export default {
title: 'Components/Nav',
component: Nav,
decorators: [
Story => (
<Router>
<Story />
</Router>
),
],
} as ComponentMeta<typeof Nav>;
const Template: ComponentStory<typeof Nav> = args => <Nav {...args} />;
export const Basic = Template.bind({});