bar-of-progressnext13-progressbarloading bar componentloading bars reactnpm

작고, 사용하기 쉬운 로딩 바 bar-of-progress

KUKJIN LEE
KUKJIN LEE
2024년 2월 15일
151

작고, 사용하기 쉬우며, 의존성이 없는 로딩 바 컴포넌트입니다.

특징

  1. 의존성 없음: 특정 프레임워크에도 연결되어 있지 않습니다.

  2. 작은 크기: Brotli로 압축 시 < 500 바이트 (gzip으로 압축 시 < 600 바이트).

  3. 사용하기 쉬움: 몇 줄만 추가하면 바로 사용할 수 있습니다. TypeScript도 지원합니다.

 

설치

npm i @badrap/bar-of-progress 명령은 Node.js의 패키지 관리자 npm을 사용하여 @badrap/bar-of-progress 패키지를 설치합니다. 이 패키지는 사용이 간편하며, 프레임워크 독립적인 진행 바 컴포넌트를 제공하고, TypeScript를 지원합니다. 설치가 완료되면, 몇 줄의 코드로 진행 바를 손쉽게 사용할 수 있습니다.

사용 시 고려해야 할 주의 사항은 다음과 같습니다:

  • 호환성: @badrap/bar-of-progress 패키지가 현재 사용 중인 Node.js 버전과 호환되는지 확인해야 합니다.

  • 의존성 관리: 패키지 설치 시 자동으로 package.json 파일에 추가됩니다. 이 파일을 통해 프로젝트 의존성을 관리하며, 필요한 패키지 버전이 항상 설치되도록 유지해야 합니다.

  • 보안: npm 패키지를 설치할 때는 패키지가 신뢰할 수 있는 출처에서 제공되는지 확인해야 합니다. 알려지지 않은 출처에서 제공하는 패키지는 코드에 보안 위험을 초래할 수 있습니다.

  • 유지 보수: 패키지의 최신 버전을 유지하며, 버전 업데이트 시 발생할 수 있는 호환성 문제에 대비해야 합니다.

npm i @badrap/bar-of-progress

 

사용법

패키지를 불러오고 진행 바 인스턴스를 생성하는 방법은 다음과 같습니다:

  1. 먼저, 설치한 @badrap/bar-of-progress 패키지를 불러옵니다.
  2. 진행 바 인스턴스를 생성합니다.

이후에는 다음과 같은 메소드를 사용하여 진행 바를 제어할 수 있습니다:

  • .start() 메소드: 이 메소드를 호출하여 진행 바를 보여주고 애니메이션을 시작합니다. 이는 사용자가 어떤 프로세스가 진행 중임을 시각적으로 인지할 수 있게 해줍니다.

  • .finish() 메소드: 이 메소드를 호출하여 진행 바 애니메이션을 종료합니다. 이는 작업이 완료되었음을 나타내며, 진행 바를 화면에서 사라지게 합니다.

주의 사항으로는:

  • 빠른 작업: .start()가 호출된 후, 작업이 매우 빠르게 완료되어 사용자가 진행 바를 볼 시간이 없는 경우를 대비해, 진행 바가 바로 보이지 않고 80밀리초의 유예 시간이 있습니다. 이는 사용자 경험을 개선하기 위한 것으로, 필요에 따라 이 행동을 커스터마이즈할 수 있습니다.

  • 재사용: 진행 바 인스턴스는 페이지 이동마다 애니메이션을 처음부터 다시 시작합니다. 이는 각 페이지 또는 액션마다 사용자에게 진행 상태를 명확하게 알려주기 위함입니다.

이렇게 @badrap/bar-of-progress 패키지를 사용하면, 몇 줄의 코드만으로 웹 애플리케이션에 동적인 진행 상태 표시를 쉽게 추가할 수 있습니다.

import ProgressBar from "@badrap/bar-of-progress";

const progress = new ProgressBar();

progress.start();

setTimeout(() => {
  progress.finish();
}, 1000);

 

예시

Next.js의 라우팅 이벤트를 활용하여 페이지 전환 시 진행 바 애니메이션을 보여주는 방식은 다음과 같습니다:

  1. 먼저, @badrap/bar-of-progress 패키지로부터 진행 바 인스턴스를 생성합니다.
  2. Next.js의 Router.events를 사용하여 라우팅 이벤트에 리스너(listener)를 추가합니다. Router.events는 Next.js의 라우터 객체에서 제공하는 이벤트들을 다룹니다.

이벤트와 관련된 동작은 다음과 같습니다:

  • routeChangeStart: 라우트 변경이 시작될 때 발생합니다. 이 이벤트가 발생하면 progress.start()를 호출하여 진행 바 애니메이션을 시작합니다. 이는 새 페이지로의 전환을 사용자에게 시각적으로 알려주는 역할을 합니다.

  • routeChangeComplete: 라우트 변경이 완료될 때 발생합니다. 이 이벤트가 발생하면 progress.finish()를 호출하여 진행 바 애니메이션을 종료합니다. 페이지 로딩이 완료된 것을 사용자에게 알려주며, 진행 바를 화면에서 사라지게 합니다.

  • routeChangeError: 라우트 변경 도중 에러가 발생했을 때 발생합니다. 에러 발생 시에도 progress.finish()가 호출되어, 진행 바 애니메이션을 종료하게 됩니다. 이는 라우팅 프로세스가 중단되었음을 나타냅니다.

이 방법을 통해 Next.js 애플리케이션에서 페이지 전환 시 사용자에게 진행 상황을 시각적으로 표현할 수 있으며, 애플리케이션의 사용자 경험을 향상시킬 수 있습니다.

 

useEffect는 React의 Hook으로서, 컴포넌트가 마운트되었을 때(또는 router.events가 변경되었을 때) 그 내부의 코드를 실행합니다. 이 코드 내부에서는 위에서 설명한 각 이벤트에 대해 핸들러를 등록했습니다.

또한, useEffect는 정리(clean-up) 함수를 반환합니다. 이 함수는 컴포넌트가 언마운트 될 때나 다음번 useEffect가 실행되기 전에 호출됩니다. 코드를 통해 메모리 누수를 방지했습니다.

Router.events.on('routeChangeStart', onRouteChange)

Router.events.on('hashChangeStart', onRouteChange)

const progress = new ProgressBar({
size: 4,
color: '#F7AB0A',
className: 'z-50',
delay: 100,
})

Router.events.on('routeChangeStart', () => progress.start())
Router.events.on('routeChangeComplete', () => progress.finish())
Router.events.on('routeChangeError', () => progress.finish())

useEffect(() => {
const handleRouteChangeStart = () => {
  progress.start()
}

const handleRouteChangeComplete = () => {
  progress.finish()
}

const handleRouteChangeError = () => {
  progress.finish()
}

router.events.on('routeChangeStart', handleRouteChangeStart)
router.events.on('routeChangeComplete', handleRouteChangeComplete)
router.events.on('routeChangeError', handleRouteChangeError)

return () => {
  router.events.off('routeChangeStart', handleRouteChangeStart)
  router.events.off('routeChangeComplete', handleRouteChangeComplete)
  router.events.off('routeChangeError', handleRouteChangeError)
}

}, [router.events])

관련 글

axios 사용자라면 반드시 읽어야 할 긴급 경고

이번에 정말 충격적인 사건이 터졌습니다. 전 세계에서 가장 많이 쓰이는 HTTP 클라이언트 라이브러리 axios가 npm 공급망 공격을 당했습니다. 이번 공격은 단순한 버그가 아니라, maintainer 계정을 해킹해 악성 버전을 직접 배포한 전형적인 Supply ...

2026년 4월 2일12

Next.js 언어 번역 라이브러리 선택 가이드

웹 서비스 글로벌 진출이 보편화되면서, 국제화(i18n) 관련 라이브러리가 많이 출시됐습니다. 많이 사용되고, 커뮤니티에서 평가가 좋은 언어 번역 라이브러리를 정리했습니다. 인기 번역 라이브러리 1. react-i18next 설명 : React 프로젝트에서 가장 널리 ...

2025년 7월 1일269

가볍고 유연한 React 아이콘 라이브러리 lucide-react

lucide-react 는 React 애플리케이션에서 SVG 아이콘을 손쉽게 사용할 수 있도록 지원하는 라이브러리 입니다. 인기 있는 Feather 아이콘을 기반으로 제작되었으며, 1000개 이상의 일관성 있는 디자인의 아이콘을 제공합니다. 또한 실제 프로젝트에서 사용...

2025년 6월 16일226

Java 이미지 최적화 라이브러리 Thumbnailator

Thumbnailator 소개 Thumbnailator는 Java 기반의 간편하고 강력한 이미지 처리 라이브러리로, 특히 이미지 리사이징 및 썸네일 제작에 최적화되어 있습니다. 직관적인 API로 빠른 개발이 가능하며, 다양한 이미지 형식을 지원합니다. 주요 특징 간결하...

2025년 6월 11일221