React ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ JavaScript ๋ฒ๋ค์ ์ฌ์ด์ฆ๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
ํฐ ๊ท๋ชจ์ React ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฉ์๋,๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ํธ๋ฆฌํฐ ๋ฑ์ด ํฌํจ๋์ด์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ด์ฆ๊ฐ ์ปค์ง๋ฉด ์ปค์ง ์๋ก ์นํ์ด์ง์ ๋ฐฉ๋ฌธํ์ ๋ ๋ก๋ํด์ผํ ํ์ผ๋ค์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ํ์ด์ง ์ฑ๋ฅ์ ์ข์ง ๋ชปํ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค.
์ด๋ React.lazy
๋ฉ์๋๋ ๋ฒ๋ค์ ์ฌ๋ฌ ์ฒญํฌ๋ก ๋๋ ์ ์๊ฒ ํด์ค๋๋ค. ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๊ธฐ์ํ ์ฒญํฌ๋ง ๋ก๋ฉํ๊ณ ํ์์ ๋ฐ๋ผ์ ์ฒญํฌ๋ค์ ๋ถ๋ฌ์ต๋๋ค.
๋จผ์ ๊ฐ๋จํ ์์ ๋ก ๋ ์ด์ง ๋ก๋ฉ์ ์ ์ฉ ํด๋ณด๊ฒ ์ต๋๋ค.
// lazy loading ์ ์ฉ ์
import React from "react";
import {sum} from "./sum";
const MainPage = () => {
return (
<div>
<h1>๋ฉ์ธํ์ด์ง</h1>
<button onClick={() => alert(sum(1, 1))}>๋ก๋ฉ</button>
</div>
);
};
export default MainPage;
MainPage ์ปดํฌ๋ํธ์์ sum์ด๋ผ๋ ๋ฉ์๋๋ฅผ importํ๊ณ button์ ํด๋ฆญํ์ ๋ sum๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์์ต๋๋ค.
๋ฒํผ์ ํด๋ฆญํ์ ๋๋ง sum ํจ์๋ฅผ ํธ์ถํ๋๋ก ํ ์ ์์ต๋๋ค.
// lazy loading ์ ์ฉ ํ
import React from "react";
// import {sum} from "./sum";
const MainPage = () => {
return (
<div>
<h1>๋ฉ์ธํ์ด์ง</h1>
<button
onClick={() => {
import("./sum.js").then((module) => {
alert(module.sum(1, 1));
});
}}
>
๋ก๋ฉ
</button>
</div>
);
};
export default MainPage;
lazy loading์ด ๋๊ณ ์๋์ง ๋ณด๊ธฐ ์ํด์ ๊ฐ๋ฐ์๋๊ตฌ์ ๋คํธ์ํฌ ํญ์ ์ฐธ๊ณ ํ๋ฉด ๋ฉ๋๋ค.
๋ฒํผ์ ํด๋ฆญํ๋ ์ฆ์ sum.js ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
react-router-dom v6๋ฅผ ์์๋ก ๋ผ์ฐํ
์ ๋ ์ด์ง ๋ก๋ฉ์ ์ ์ฉํ๊ฒ ์ต๋๋ค.
(์ฝ๋๋ฅผ ์ค๊ฐ ์ค๊ฐ ์๋ต์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค)
import { lazy, Suspense } from "react";
import MainPage from "./pages/main";
// ๊ธฐ์กด์ ์ปดํฌ๋ํธ import ๋ฐฉ์์ผ๋ก CampaignPage ๋ถ๋ฌ์ค๊ธฐ
// import CampaignPage from "./pages/campaign";
// lazy๋ก CampaignPage ๋ถ๋ฌ์ค๊ธฐ
const CampaignPage = lazy(() => import("./pages/campaign"));
import Root from "./pages/Root";
const router = createBrowserRouter([
{
path: "/",
element: <Root />,
errorElement: <ErrorPage />,
children: [
{
path: "",
element: <MainPage />,
},
{
path: "campaign",
element: (
// Suspense๋ก ๋ก๋ฉ ๋ถ๋ถ ๊ตฌํ
<Suspense fallback={<p>๋ก๋ฉ...</p>}>
<CampaignPage />
</Suspense>
),
loader: async () => {
const response = await fetch(
`/api/campaign`
);
const resData = await response.json();
return resData.contentsData;
},
},
],
},
]);
lazy
๋ฅผ ์ฌ์ฉํ ๋ Suspense
๋ฅผ ํจ๊ป ์ฌ์ฉํ์ฌ์ React์๊ฒ ๋ ์ด์ง ๋ก๋ฉํ๊ณ ์์์ ์๋ ค ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ง ๋ ๋๋ง ์ค๋น๊ฐ ๋์ง ์์์ ๋, ๋ก๋ฉ ์คํผ๋ ๊ฐ์ ์ง์๊ธฐ๋ฅผ ๋ ๋๋ง ํ๋๋ก fallback์ ์ฝ๋๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
Lazy Loading์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๊ธฐ ๋๋ฌธ์ ๋ค์์๋ ์์ฉ๋ฒ์ ์๋ ค๋๋ฆด ์ ์๋๋ก ํ๊ฒ ์ต๋๋ค.