사이트가 로딩시 오래 걸리는 문제를 해결하고 싶었음 (방법1+방법2를 같이 사용하여 로딩시간 단축 해결)
방법1: React.memo 이용하기
▼ map이 사용되는 jsx에 마지막 export에 아래 코드와 같이 React.memo를 추가한다.
export default React.memo(ZetaMap);
방법2 (App.js)
(1) import 시켜주기
import { Suspense } from 'react';
(2) 기존 페이지 컴포넌트 import방식을 아래와 같이 const 컴포넌트명=React.lazy(()=>import('경로')); 로 변경한다.
const Login = React.lazy(() => import('./pages/login'));
(3) Routes를 <Suspense fallback={<div>Loading...</div>}> </Suspense>로 감싸준다.
로딩되어 뜨기 전 loading되는 페이지임. 이걸 써주지 않을 시, 메뉴 클릭시 해당 페이지로 가지 않는 오류가 생길 수 있다.
안에 Loading되는 건 자유 구성 가능.
<BrowserRouter>
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Landing />} />
</Routes>
</Suspense>
</BrowserRouter>
▼ 정리한 총 코드 - app.js
import React from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
...
import { useState, Suspense } from 'react';
const Login = React.lazy(() => import('./pages/login'));
.......
const QnaWrite = React.lazy(() => import('./pages/notice/QnaWrite'));
function App() {
const [hdSubStyle, setHdSubStyle] = useState('hdMain');
return (
<div className="App">
<ResetStyle />
<BrowserRouter>
<ScrollToTop />
<Header hdSubStyle={hdSubStyle} />
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Landing />} />
...
....
</Routes>
</Suspense>
</BrowserRouter>
<Consulting />
<TopBtn />
<Footer />
</div>
);
}
export default App;
방법2 레퍼런스
https://reactjs.org/docs/code-splitting.html#gatsby-focus-wrapper
*network이용하여 확인
구글크롬>network 에서 용량, 로딩시간 확인 가능
size 300을 넘으면 안되긴함
'cbp 프로젝트 진행' 카테고리의 다른 글
[2022.07.30] 로컬 링크로 모바일에서도 사이트 확인하기 (0) | 2022.07.30 |
---|---|
[2022.07.30] React.lazy사용시 SCSS 스타일 적용 오류 (0) | 2022.07.30 |
[2022.07.24] 특정 요소가 화면에 스크롤 되면 나타나게 하기(점점 오른쪽으로 커지게 loding처럼 효과) (0) | 2022.07.24 |
[2022.07.25] BreadCrumb 브레드크럼 만들기 (0) | 2022.07.24 |
[2022.07.23] 모달창 만들기 (0) | 2022.07.23 |