카테고리 없음

Loadable Components로 코드 스플리팅하기

냠냠맨 2023. 4. 19. 15:01

🐕 인트로

https://xionwcfm.tistory.com/256

저번에 학습한 React.lazy의 연장선으로 코드 스플리팅을 도와주는 라이브러리인

Loadable Components를 학습해보려고 합니다.

이 라이브러리는 서버 사이드 렌더링을 지원한다는 장점이 있습니다.

또한 렌더링 하기 전에 필요할 때 스플리팅 된 파일을 미리 불러올수도있고요!

$ yarn add @loadable/component

먼저 install을 해주고 사용해봅시다.


👻loadable 문법과 React.lazy 문법

import logo from './logo.svg';
import './App.css';
import React, { useState} from 'react';
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);
  };
  return (
    <div className="App">
      <p onClick={onClick}> hello react</p>
      {visible && <SplitMe />}
    </div>
  );
}

export default App;

대표적인 차이점은 Suspense 컴포넌트를 사용할 필요가 없다는 것이네요!

그럼 Suspense 컴포넌트에서 내려주던 prop fallback의 역할은 어디서해야할까?

라는 생각이 드는데 그부분은 두번째 인자에 객체형태로

fallback시에 렌더링될 요소를 넣어서 보내주는 것으로 해결하네요! 


🥶 preload를 해보자

근데 전 이 비동기 방식 자체에 살짝 의문이 있었습니다.

왜냐면 작은 코드를 비동기로 불러오는거야 상관없겠지만은

만약 무겁고 복잡한 코드를 불러올때는 그 코드를 불러오는 시간이

너무 길수가 있잖아요? 아무리 생각해도 미리 불러오기를 해야할 것 같은데..

라고 생각을 하고있었는데 그 의문점을 preload가 깔끔하게 해결해줍니다.

import logo from './logo.svg';
import './App.css';
import React, { useState } from 'react';
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">
      <p onClick={onClick} onMouseOver={onMouseOver}>
        {' '}
        hello react
      </p>
      {visible && <SplitMe />}
    </div>
  );
}

export default App;

preload()함수를 이용하면 미리 불러올 수 있습니다.

따라서 Mouse가 p태그 위에 올라가면 로딩이 시작되게 되는 코드입니다.

사용법이 완전 간단하네요


🐶마치며

Loadable Components는 미리 불러오는 기능 외에도

타임 아웃이나 로딩 UI 딜레이, 서버 사이드 렌더링 호환 등의 다양한 기능을 제공합니다.

전 웹팩 설정을 만져서 파일을 나눠놓는것을 생각했는데

이런식으로도 코드스플리팅이 가능하군용


이해했다고 생각할 때가 가장 무서울 때다.

 

반응형