React

[React] React.lazy와 Suspense, Loadable Components

썽연 2021. 10. 24. 01:06
728x90

React.lazy와 Suspense를 사용하면 코드 스플리팅을 하기 위해 state를 따로 선언하지 않고도 정말 간편하게 컴포넌트 코드 스플리팅을 할 수 있다.

 

Suspense는 리액트 내장 컴포넌트로서 코드 스플리팅된 컴포넌트를 로딩하도록 발동시킬 수 있고,

로딩이 끝나지 않았을 때 보여 줄 UI를 설정할 수 있다.

 

React.lazy와 Suspense를 사용한 App.js

import React, { useState, Suspense } from 'react';
import logo from './logo.svg';
import './App.css';
const SplitMe = React.lazy(() => import('./SplitMe'));

function App() {
  const [visible, setVisible] = useState(false);
  const onClick = () => {
    setVisible(true);
  }
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p onClick={onClick}>Hello React!</p>
        <Suspense fallback={<div>loading...</div>}>
          {visible && <SplitMe />}
        </Suspense>
      </header>
    </div>
  )
}

export default App;

 

 

Loadable Components는 코드 스플리팅을 편하게 하도록 도와주는 서드파티 라이브러리이다.

해당 라이브러리의 이점은 ?

- 서버 사이드 렌더링을 지원한다.

- 렌더링 하기 전에 필요할 때 스플리팅 파일을 미리 불러올 수 있다.

 

Loadable Component를 사용한 App.js 

+ onMouseOver기능 추가

import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';
import loadable from '@loadable/component';
const SplitMe = loadable(() => import('./SplitMe'),{
  fallback: <div>loading...</div>
});

function App() {
  const [visible, setVisible] = useState(false);
  const onClick = () => {
    setVisible(true);
  }
  const onMouseOver=()=>{
    SplitMe.preload();
  };
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p onClick={onClick} onMouseOver={onMouseOver}>Hello React!</p>
          {visible && <SplitMe />}
      </header>
    </div>
  )
}

export default App;

 

 

서버사이드 렌더링?

- 웹 서비스의 초기 로딩 속도 개선, 캐싱 및 검색 엔진 최적화를 가능하게 해주는 기술

- 서버 사이드 렌더링을 사용하면 웹 서비스의 초기 렌더링을 사용자의 브라우저가 아닌 서버쪽에서 처리!

 

 

728x90