React์์๋ SPA(Single Page Application)์ผ๋ก ๊ตฌํ๋๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ์ง ์๋ ์ปดํฌ๋ํธ๋ ๋ถ๋ฌ์ค๊ณ ์๋ค. ์ด๋ก ์ธํด ๋ ๋๋ง ์๊ฐ์ด ๊ธธ์ด์ง ์ ์๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด lazy์ Suspense๊ฐ ์ฌ์ฉ๋๋ค.
lazy
์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ์ค์ ๋ก ๊ทธ ์ปดํฌ๋ํธ๊ฐ ํ์ํ ๋ ๋ถ๋ฌ์จ๋ค.
lazy์ ์ธ์๋ก import ํจ์๋ฅผ ์ ๋ฌํ๊ณ , ์ปดํฌ๋ํธ๋ฅผ ๋ฐํํ๋ค.
* lazy๋ ๋ณดํต ๋ชจ๋์ ์ต์์ ์์ค์์ ์ ์ธ๋์ด์ผ ๋ ๋๋ง ์ ๋ชจ๋ ์ํ๊ฐ ์ฌ์ค์ ๋๋ ํ์์ ๋ง์ ์ ์๋ค
// ๊ธฐ์กด import ๋ฐฉ์
import Main from "./Main.jsx"
// lazy ์ฌ์ฉ ์
const Main = lazy(()=>import("./Main.jsx"));
Suspsense
lazy๋ฅผ ํตํด import๋ฅผ ํ๋ ๋์ ํ๋ฉด์ ๋์ฒด UI๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ๋ก, ๋์ฒด๋๋ ์์ ํ๋ฉด์ fallback์ ๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด fallback์ด ๋์ ๋ ๋๋ง๋๋ค.
๋ก๋ฉ์ด ๋๋๋ฉด ์์ ์ปดํฌ๋ํธ (importํ๋ ค๋ lazy์ ์ปดํฌ๋ํธ๋ฅผ ์์ ์ปดํฌ๋ํธ๋ก ๋ฃ์ด์ค์ผํ๋ค.)๊ฐ ๋ ๋๋ง๋๋ ํจํด์ด๋ค.
<Suspense fallback={"๋ก๋ฉ์ค"}><Main /></Suspense>
์์
์ด์ ์ ์ค์ตํ๋ ๋๋ฌผ์ข์ ํ๋ก์ ํธ๋ฅผ lazy, suspense๋ก ์์ ํ๋ค... https://hydeveloper.tistory.com/195
๋จผ์ ๊ธฐ์กด Import๋ฌธ์ lazy๋ฅผ ์ฌ์ฉํด ์์ ํ๋ค.
/* // ์ด์ ๋ฐฉ์
import Main from './page/Main';
import Detail from './page/Detail';
import Search from './page/Search';
*/
// lazy ์ฌ์ฉ
const Main = lazy(() => import('./page/Main'));
const Detail = lazy(() => import('./page/Detail'));
const Search = lazy(() => import('./page/Search'));
๊ทธ ๋ค์, Routes๋ก ๊ตฌ์ฑ๋๊ณ ์๋ ์ด์ ๋ฐฉ์์์ Suspense๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค.
function App() {
return (
// ์๋ต....
// ์ด์ ๋ฐฉ์
<Routes>
<Route path="/" element={<Main />}></Route>
<Route path="/detail/:id" element={<Detail />}></Route>
<Route path="/search" element={<Search />}></Route>
</Routes>
)
}
๋๊ฒ ๊ฐ๋จํ๋ฐ, Suspense ์ปดํฌ๋ํธ๋ฅผ ์์ฑ ํ Routes๋ฅผ ์์ ์ปดํฌ๋ํธ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
<Suspense fallback={<h1>Loading...</h1>}>
<Routes>
<Route path="/" element={<Main />}></Route>
<Route path="/detail/:id" element={<Detail />}></Route>
<Route path="/search" element={<Search />}></Route>
</Routes>
</Suspense>
์ด์ ํ์ธ์ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ
๊ฐ๋ฐ์ ๋๊ตฌ์์ ๋ค์๊ณผ ๊ฐ์ด ๋คํธ์ํฌ ์ ํ์ผ๋ก ์ค์ ํด ์์์ ์ํฉ์ ๋ง๋ค์ด๋ผ ์ ์๋ค๊ณ ํ๋ค..!!
๋๋ ์ผ๋จ ๋ก๋ฉ์ฐฝ์ ๋ณด๊ธฐ์ํด ๋คํธ์ํฌ ์ ํ์ ๋๋ฆฐ 4G๋ก ์ค์ ํ๋ค. (3G๋ ๋๋ฌด ๋๋ฆผ... ์๋ ์ ๊ทธ ๋คํธ์ํฌ๋ก ์ด๋ป๊ฒ ์ด์์์ง..)
๊ทธ๋ฆฌ๊ณ ์บ์๊ฐ ๋จ์์์ ์ง ๋ชจ๋ฅด๋, ์๋ก๊ณ ์นจ ์์ด์ฝ์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ์ ํ๋ฉด ์บ์ ๋น์ฐ๊ธฐ ๋ฐ ๊ฐ๋ ฅ ์๋ก๊ณ ์นจ์ ํ ์ ์์ด์ ํ์ธํด๋ดค๋ค.
๊ทธ๋ฆฌ๊ณ ์์ค ํญ์ ๊ฐ์ ์ค์ ๋ก ์ด๋ค ์ปดํฌ๋ํธ๋ค์ด ๋ถ๋ฌ์์ก๋์ง ํ์ธํด๋ณผ ์ ์๋ค.
lazy์ Suspense ๋์ ํ ์ค์ ๋ก ์ง๊ธ ํ์๋๊ณ ์๋ Main.jsx๋ง ๊ฐ์ ธ์ค๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์์ธ ํ์ด์ง๋ฅผ ๋๋ฅด๋ฉด ๊ทธ๋ Detail.jsx๊ฐ ์ถ๊ฐ๋๊ณ , ๊ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ Search.jsx๊ฐ ์ถ๊ฐ๋๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
'react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React / Debounce, Throttle (0) | 2025.04.24 |
---|---|
React / ๋ฒ๋ค๋ง, ์ฝ๋์คํ๋ฆฌํ (0) | 2025.04.24 |
React / React Developer Tools (0) | 2025.04.24 |
React / ์ต์ ํ ํจ์ (0) | 2025.04.23 |
React / ์ ์ญ ์ํ ๊ด๋ฆฌ (2) - Redux, Redux Toolkit (0) | 2025.04.22 |