개발자

다크모드에서 react lazy 사용할 때 흰 화면이 보이는 이슈

2023년 03월 19일조회 250

react lazy를 route 단에서 적용을 했는데 페이지를 이동할 때마다 흰색화면이 나옵니다. 라이트 모드에서는 괜찮은데 다크모드를 사용 중일 때는 route를 이동할 때마다 흰배경이 나와서 불편하더라구요. 혹시 이런 부분은 어떻게 처리하는 것이 좋을까요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

이 문제는 React 애플리케이션에서 다크 모드를 지원하기 위해 CSS 테마 전환을 사용할 때 발생할 수 있습니다. 보통 React 애플리케이션에서는 다음과 같은 방법으로 CSS 테마 전환을 처리합니다. 1. 사용자가 다크 모드를 활성화하면 body 요소에 'dark' 클래스를 추가합니다. 2. 애플리케이션에서 CSS 선택자를 사용하여 테마에 따라 적절한 스타일을 적용합니다. 하지만 React Lazy를 사용할 경우 페이지 이동이 느려질 수 있기 때문에 페이지 이동이 발생할 때마다 흰색 배경이 나타날 수 있습니다. 이 문제를 해결하려면 React Suspense를 사용하여 로딩 화면을 추가하고, CSS 테마 전환에 대한 처리를 Suspense에서 수행하도록 변경하는 것이 좋습니다. 다음은 예시 코드입니다. 아래 코드에서는 'Suspense' 컴포넌트를 사용하여 로딩 화면을 추가하고, 'document.body.classList'를 사용하여 현재 테마에 따라 적절한 컴포넌트를 렌더링합니다. 이렇게 하면 페이지 이동이 느려져도 로딩 화면이 표시되므로 사용자가 흰색 배경을 보는 것을 방지할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { lazy, Suspense } from 'react';

// 다크 모드에서 사용할 컴포넌트
const DarkModeComponent = lazy(() => import('./DarkModeComponent'));

// 라이트 모드에서 사용할 컴포넌트
const LightModeComponent = lazy(() => import('./LightModeComponent'));

function MyComponent() {
  return (
    <div className={document.body.classList.contains('dark') ? 'dark' : 'light'}>
      <Suspense fallback={<div>Loading...</div>}>
        {document.body.classList.contains('dark') ? (
          <DarkModeComponent />
        ) : (
          <LightModeComponent />
        )}
      </Suspense>
    </div>
  );
}

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!