일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 리액트
- gsap
- 타입스크립트
- react native safeArea
- styled component 작동 안될때
- 프론트앤드
- react이론
- safari wiondow.open
- js 특정 위치로 이동
- RN navitate push
- reactnative 웹뷰 페이지 로딩
- React-Native 공부
- React Native SafeArea Custom
- styled component 작동안함
- input 숫자입력
- SafeArea 커스텀
- 퍼블리셔
- gsap 기초
- 임고미
- JS
- 트윈맥스 기초
- slick slider 간격
- React Native navigation
- styled component is not working
- scrollIntoView scrollTo
- react
- styled component
- 웹뷰 페이지 로딩
- React-Native IOS
- rn webview page loading
Archives
- Today
- Total
개발공부 임고미
[리액트] router 사용하기 본문
728x90
300x250
리액트 라우터 세팅하기
react-router를 사용하면 싱글 페이지 애플리케이션과 같이 페이지 깜박임이 없으면서도 주소를 가질 수 있게 됩니다.
1. import
import React from 'react';
import { Switch, Route, Redirect, BrowserRouter } from 'react-router-dom';
import 한 정보들은 다음과 같습니다.
- <BrowserRouter />: HTML5 히스토리 API를 사용하여 주소를 관리하는 라우터(해쉬뱅 모드 사용 안함)
- <Route />: 요청 경로와 렌더링할 컴포넌트를 설정한다
- <Switch />: 하위에 라우터 중 하나를 선택한다
- <Redirect />: 요청 경로를 다른 경로로 리다이렉션한다
2. load component
//사용할 컴포넌트 로드해주기
import HomePage from 'pages/HomePage'
import AboutPage from 'pages/AboutPage'
import ProductPage from 'pages/ProductPage'
사용할 컴포넌트를 로드해 줍니다.
//(선택 사항)path를 설정해줍니다.
export const ROUTE_HOME = '/';
export const ROUTE_ABOUT = '/About';
export const ROUTE_PRODUCT = '/Product';
path를 만들어줍니다. 이 부분은 선택사항입니다.
참고: 아래의 코드같이 path name을 사용할 수 있게됩니다. 물론, to={'/'} 이렇게 적어도 되긴합니다!
→ 그래서 선택사항이라는 겁니다!
import { ROUTE_HOME } from 'routes';
export default const HomeButton () => {
return (
<Link to={ROUTE_HOME} className='home'> 홈으로 </Link>
)
}
3. Router
export const AppRouter = () => {
return (
<BrowserRouter>
<Switch>
<Route path={ROUTE_HOME} exact component={HomePage} />
<Route path={ROUTE_ABOUT} component={AboutPage} />
<Route path={ROUTE_PRODUCT} component={ProductPage} />
<Redirect path="*" to="/" />
</Switch>
</BrowserRouter>
)
}
경로를 세팅해줍니다.
point 1. 먼저 Home으로 가는 경로를 ' / ' 입니다.
이 경우, ' /About', '/Product' 또한 / 이 들어가기 때문에 home으로 가질 수 있습니다.
그렇기에 확실히 ' / '으로 들어왔을때만 (' / 뒤에 아무것도 없이') Home으로 이동시켜주기 위해 exact 를 넣어줍니다.
point 2. Redirect는 '요청 경로를 다른 경로로 리다이렉션한다' 라는 것으로,
설정해준 경로를 벗어나면 ' to=" " ' 에서 설정해준 경로로 이동합니다.
→ 즉, 여기에선 ' / ' Home으로 이동하게 됩니다.
이것이 끝입니다!
다른방법은 없을까요 ?
조금더 간단하게 관리할 수 있는 방법도 있습니다.
( 컴포넌트로드, 일일이 다설정해 줄 필요가 없어서 간편하다는 말입니다. )
React.lazy와 Suspense 를 이용해 코드분할을 통한 방법입니다.
주의
React.lazy와 Suspense는 아직 서버 사이드 렌더링을 할 수 없습니다. 서버에서 렌더링 된 앱에서 코드 분할을 하기 원한 다면 Loadable Components를 추천합니다. 이는 서버 사이드 렌더링과 번들 스플리팅에 대한 좋은 가이드입니다.
1. App.js에서 content를 넣는 부분에 라우터를 설정해줍니다.
import React, { Suspense } from 'react';
import { Switch, Route } from 'react-router-dom';
import routes from './routes';
import { PageSpinner } from 'components';
import NotFound from 'pages/NotFound';
<div>
<Suspense fallback={<PageSpinner />}>
<Switch>
{routes.map(({ path, component }, index) => (
<Route exact key={index} path={path} component={component} />
))}
<Route path="*" component={NotFound} />
</Switch>
</Suspense>
</div>
- Suspens 에 fallback prop은 컴포넌트가 로드될 동안 렌더링되는 부분입니다. ( 로딩중.... 이런거요!)
→ React element를 넘겨줄 수 있습니다.
Suspense 컴포넌트는 lazy 컴포넌트를 감쌉니다. ( 여러개의 lazy도 감쌀 수 있습니다.) - Switch 에서 route 들을 map돌려줍니다 (반복문)
- 경로를 찾을 수 없을때, 이번엔 NotFound페이지로 이동시켰습니다.
2. routes폴더 안에서 index.js를 만들어줍니다.
import { lazy } from 'react';
export default [
{
path: '/',
component: lazy(() => import('../components/Main')),
},
{
path: [
'/page',
'/page/1',
'/page/2',
],
component: lazy(() => import('../components/pages')),
},
{
path: '/lilyProfile',
component: lazy(() => import('../components/lilyProfile')),
}
];
1. React.lazy는 동적 import()를 호출하는 함수를 인자로 가집니다.
2. 이 함수는 React 컴포넌트를 포함하며 default export를 가진 모듈로 결정되는 Promise로 반환해야 합니다.
→ named export는 지원하지 않습니다.!
export default와 export named의 차이가 궁금하다면? 여기를 클릭해주세요.
결론
lazy 함수는 그 컴포넌트를 로드할때 import함으로, 한번에 모두다 import 하지 않기때문에
728x90
300x250
'리액트 > 코드' 카테고리의 다른 글
[리액트] 쿠키값을 이용해 조작하기 (0) | 2020.09.02 |
---|
Comments