1. React.memo()
https://dive-into-frontend.tistory.com/79
7. 리액트의 최적화 With React.memo(), useCallback(), useMemo()
서론. 리액트가 작동하는 방식 리액트는 오로지 "컴포넌트" 에만 초점이 맞추어져 있다. 1) 컴포넌트 끼리 props 를 넘긴다던가 [ props 전달 ] 2) 컴포넌트의 State 를 변화시킨다던가 [ internal-component S
dive-into-frontend.tistory.com
2. LazyLoading
레이지 로딩이란, 필요할 때, 로딩을 하는 것을 말한다.
기본적인 SPA 의 배포 에서, 클라이언트는, 배포된 사이트를 들어갈때,
모든 자바스크립트를 포함한 코드를 전부 다운받고, 페이지를 로드한다.
이는, 잘 들어가지 않는 페이지에 대해서는, 불필요한 일이고, 데이터의 낭비를 초래한다.
그러므로, 잘들어가지 않는 페이지에 한해, LazyLoading 을 적용시켜, 필요한 경우에만 다운로드 하도록 만든다.
React 는 그것을 쉽게 구현하도록 만들어 주었다.
바로 React.lazy() 를 통해
<레이지 로딩 전>
import { Route, Redirect, Switch } from "react-router-dom";
import MainHeader from "./components/headers/main-header";
import Welcome from "./pages/welcome";
import ProductDetail from "./pages/product-detail";
<레이지 로딩 설정 >
import React from "react" // React 임포트
import { Route, Redirect, Switch } from "react-router-dom";
...
const Products = React.lazy(()=> import("./pages/product")) // 프로덕트 레이지로딩
** import 를 하면, 즉시 다운로드가 된다.
그러므로, 변수 형태에 저장해, React.lazy() 를 통해, 콜백함수로 import 한다.
3. 지연 로딩
클릭하는 즉시 다운로드 받고 접속한다.
말이 이상하다. 클릭을 한 후에, 다운로드를 받고, 다운로드가 끝나면 들어간다?
다운로드 중에는 어떻게 되는거지?
바로 에러가 짠!
0.1초의 그 순간에도 페이지는 접속을 하려 하지만,
그 찰나의 순간에 다운로드를 받고 있는 우리는 그 페이지에 접속 할 수 없다.
그러므로, 다운로드 받는 중에, 지연로딩 을 만들어야한다.
지연로딩이란, 다운로드(로딩)중에, 본 코드를 잠시 멈추고, 다른 코드를 실행시켜주는 것이다.
다운로드가 끝나면, 다시 본 코드를 읽게 될 것이다.
react 에서는 Suspense 를 통해, 지연 로딩을 추가한다.
import React, {Suspense} from "react" // React, Suspense 임포트
import { Route, Redirect, Switch } from "react-router-dom";
...
const Products = React.lazy(()=> import("./pages/product")) // 프로덕트 레이지로딩
<Suspense fallback = {<p> ...loading </p>}> // Suspense 로 Router 들을 감싸준다.
<Switch>
<Route exact path="/">
<Redirect to="/welcome" />
</Route>
<Route path="/welcome">
<Welcome />
</Route>
<Route exact path={"/products"}>
<Products />
</Route>
<Route path={"/products/:productsName"}>
<ProductDetail />
</Route>
</Switch>
</Suspense> // Suspense 로 감싸준다.
Suspense 의 fallback 에서는, JSX 코드를 반환해, 로딩 될 시간동안 다른 컴포넌트를 렌더할 수 있다.
<Suspense fallback = {<div> <LoadingSpinner/ > </div>}>
<Switch>
<Router path="/">
<Welcome />
</Router>
...
'React > React-Route' 카테고리의 다른 글
9. [리액트- 라우터 - 배포시 주의사항] SPA 의 장점을 잃어버리지 말 것 (0) | 2022.12.22 |
---|---|
7. V6 업그레이드 방법 기초(1) (0) | 2022.12.22 |
6. useHistory, 복잡한 쿼리매개변수와 path 를 가지고 있을 때, 사용방법 (0) | 2022.12.22 |
5. onFocus 리스너와 함께하는 Prompt 로 "정말 뒤로 갈건지 한번 딱 물어봐주기" (0) | 2022.12.22 |
4. 잘못된 URL 주소로 들어간다면, Not Found Page 돌려주기 (1) | 2022.12.22 |
댓글