Suspense
컴포넌트 (+ Outlet
)사용 정리
_layout.tsx
에 설정 후 사용 >> 상위 컴포넌트 레이아웃화<Suspense>
컴포넌트와 결합해서 사용해 로드 상태 처리 구현GlobalLayout
로 설정 후 children(<Outlet>
)처리로 중첩 라우팅// _layout.tsx
import { Suspense } from "react";
import { Outlet } from "react-router-dom";
export default function Layout() {
return (
<Suspense fallback="loading...">
<Outlet />
</Suspense>
);
}
<Route path="/" element={<Dashboard />}>
<Route
path="messages"
element={<DashboardMessages />}
/>
<Route path="tasks" element={<DashboardTasks />} />
</Route>
Route
가 children으로 들어간다. (<Outlet>
)사용 이유
Suspense
구성 요소와 함께 React.lazy
를 같이 사용한다.*** 로딩시 에러 처리 - https://legacy.reactjs.org/docs/error-boundaries.html
React.lazy
함수Before
import OtherComponent from './OtherComponent';
After
const OtherComponent = React.lazy(() => import('./OtherComponent'));
특징
default
export로 가진 모듈 객체가 이행되는 Promise
를 반환해야 한다.Suspense
컴포넌트 하위에서 렌더링 되야한다.사용 이유
// Routes.tsx
import { lazy } from "react";
import GlobalLayout from "./pages/_layout";
const SignInPage = lazy(() => import("./pages/signin"));
const SignUpPage = lazy(() => import("./pages/signup"));
const HomePage = lazy(() => import("./pages/home"));
const TodoPage = lazy(() => import("./pages/todo"));
export const routes = [
{
path: "/",
element: <GlobalLayout />,
children: [
{ index: true, element: <HomePage /> },
{ path: "/signin", element: <SignInPage /> },
{ path: "/signup", element: <SignUpPage /> },
{ path: "/todo", element: <TodoPage /> },
],
},
];
<Suspense>
로 감싸서 loading 처리)<Outlet>
에서 처리** index 속성은 경로를 설정하진 않지만 기본 하위 경로로 자동 설정될지를 나타낸다.
chuck.js 파일이란 ?
React 애플리케이션을 개발할 때, 일반적으로 webpack과 같은 번들러를 사용하여 여러 개의 JavaScript 파일을 하나로 묶어서 처리합니다. 이 과정에서 webpack은 번들링된 JavaScript 파일을 청크(chunk) 단위로 분리하여 빌드합니다.
React 애플리케이션이 로딩될 때, webpack에서 빌드한 청크(chunk) 파일들이 다운로드되고 로딩되면서 애플리케이션이 실행됩니다. 이때 보통chunk.js
확장자를 가진 파일들이 다운로드되는데, 이 파일들은 웹팩에서 빌드한 청크 파일들을 포함하고 있습니다.
따라서chunk.js
파일들은 웹팩에서 애플리케이션을 빌드할 때 생성되는 파일로, 웹팩이 번들링한 모듈들을 포함합니다. 이 파일들을 로딩하는 것은 React 애플리케이션의 초기 구동 속도를 향상시키는 데 도움이 됩니다.
웹팩에서 코드 스플리팅을 설정하면, 빌드 시점에서 생성된 청크 파일들이 렌더링 시점에 로드되어 렌더링 속도를 개선할 수 있습니다.
=> cra로 프로젝트 생성하면 프로덕션 빌드에서 코드 스플리팅을 자동으로 설정해 chuck 파일을 로직과 함께 빌드함
CRA에서는 webpack과 같은 빌드 도구를 사용하여 코드 스플리팅을 구현합니다. React.lazy()와 Suspense를 사용하여 동적으로 모듈을 로드하면, 해당 모듈의 청크 파일이 필요할 때 자동으로 로딩되며, 필요한 시점에 렌더링됩니다. 이러한 코드 스플리팅 방식은 불필요한 로딩 시간을 최소화하여 성능을 향상시키는 데 도움을 줍니다.