import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Main from '../pages/Main';
import Search from '../pages/Search';
import Recipe from '../pages/Recipe';
import Detail from '../pages/Detail';
import My from '../pages/My';
import Admin from '../pages/Admin';
import NotFound from '../pages/NotFound';
import Header from '../components/layout/Header';
import ScrollToTopButton from '../components/layout/ScrollToTopButton';
const Router = () => {
return (
<BrowserRouter>
<Header />
<Routes>
<Route path="/" element={<Main />} />
<Route path="/search/:keyword" element={<Search />} />
<Route path="/recipe" element={<Recipe />} />
<Route path="/detail/:id" element={<Detail />} />
<Route path="/my" element={<My />} />
<Route path="/admin" element={<Admin />} />
<Route path="*" element={<NotFound />} />
</Routes>
<ScrollToTopButton />
</BrowserRouter>
);
};
export default Router;
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import React, { Suspense } from 'react';
import Header from '../components/layout/Header';
import ScrollToTopButton from '../components/layout/ScrollToTopButton';
import Loading from '../components/common/Loading';
const Main = React.lazy(() => import('../pages/Main'));
const Search = React.lazy(() => import('../pages/Search'));
const Recipe = React.lazy(() => import('../pages/Recipe'));
const Detail = React.lazy(() => import('../pages/Detail'));
const My = React.lazy(() => import('../pages/My'));
const Admin = React.lazy(() => import('../pages/Admin'));
const NotFound = React.lazy(() => import('../pages/NotFound'));
const Router = () => {
return (
<BrowserRouter>
<Header />
<Suspense fallback={<Loading />}>
<Routes>
<Route path="/" element={<Main />} />
<Route path="/search/:keyword" element={<Search />} />
<Route path="/recipe" element={<Recipe />} />
<Route path="/detail/:id" element={<Detail />} />
<Route path="/my" element={<My />} />
<Route path="/admin" element={<Admin />} />
<Route path="*" element={<NotFound />} />
</Routes>
</Suspense>
<ScrollToTopButton />
</BrowserRouter>
);
};
export default Router;
// 적용 전
import Main from '../pages/Main';
// 적용 후
const Main = React.lazy(() => import('../pages/Main'));
img 태그에 HTML의 loading = "lazy" 속성도 추가했다.
React.lazy는 React 컴포넌트를 동적으로 로드하기 위해 사용하는 api,
loading = "lazy"는 이미지 등의 컨텐츠의 로딩을 지연시키는 데 사용된다. 페이지가 처음 로드될 때 보이지 않는 이미지의 로딩을 지연시켜 성능을 개선할 수 있다. (스크롤 하단 보이지 않는이미지 등)
<RecipeImgWrapper>
<img src={recipe.image} alt={recipe.name} loading="lazy" />
</RecipeImgWrapper>