현대 웹 애플리케이션에서는 일정 관리와 날짜 선택 기능이 점점 더 중요해지고 있습니다. 사용자 친화적인 캘린더 기능을 구현하면 애플리케이션의 가치를 높일 수 있습니다. 이 글에서는 React 애플리케이션에 손쉽게 캘린더 기능을 추가할 수 있는 react-calendar 라이브러리를 소개하고, 단계별로 적용하는 방법을 설명하겠습니다.
react-calendar는 React를 위한 오픈 소스 캘린더 컴포넌트로, 간단하고 커스터마이즈가 용이합니다. 날짜 선택, 범위 선택, 로컬라이제이션 등 다양한 기능을 제공하여 다양한 요구사항에 대응할 수 있습니다.
먼저 새로운 React 프로젝트를 생성합니다:
npx create-react-app my-calendar-app
cd my-calendar-app
프로젝트 디렉토리에서 다음 명령어로 react-calendar를 설치합니다:
npm install react-calendar
또는 yarn을 사용하는 경우:
yarn add react-calendar
이제 컴포넌트를 앱에 가져와서 사용해 보겠습니다.
import React, { useState } from 'react';
import Calendar from 'react-calendar';
import 'react-calendar/dist/Calendar.css';
function App() {
const [value, onChange] = useState(new Date());
return (
<div>
<h1>React Calendar 예제</h1>
<Calendar onChange={onChange} value={value} />
</div>
);
}
export default App;
위 코드에서 우리는 Calendar 컴포넌트를 가져와 상태와 함께 사용하고 있습니다.
react-calendar는 다양한 props를 통해 커스터마이징이 가능합니다.
<Calendar
minDate={new Date()}
maxDate={new Date(2023, 11, 31)}
/>
월별, 연도별 보기 등을 설정할 수 있습니다.
<Calendar
view="year"
onViewChange={({ activeStartDate, view }) => console.log(view)}
/>
날짜 선택 시 특정 동작을 수행하려면 onChange 핸들러를 사용합니다.
function App() {
const [date, setDate] = useState(new Date());
const handleDateChange = (value) => {
setDate(value);
console.log('선택된 날짜:', value);
};
return (
<Calendar onChange={handleDateChange} value={date} />
);
}
기본 CSS를 가져오지 않고 커스텀 스타일을 적용할 수 있습니다.
import './CustomCalendar.css';
그리고 CSS 파일에서 원하는 대로 스타일을 지정합니다.
.react-calendar {
border: none;
}
.react-calendar__tile {
background: none;
}
다국어 지원을 위해 로컬라이제이션을 설정할 수 있습니다.
import { Calendar } from 'react-calendar';
import { ko } from 'date-fns/locale';
<Calendar locale="ko-KR" />
const [dates, setDates] = useState([new Date(), new Date()]);
<Calendar
selectRange
onChange={setDates}
value={dates}
/>
특정 날짜에 특별한 마크를 표시할 수 있습니다.
<Calendar
tileContent={({ date, view }) =>
view === 'month' && date.getDay() === 0 ? <p>휴일</p> : null
}
/>
react-calendar를 사용하면 React 애플리케이션에 강력하고 유연한 캘린더 기능을 손쉽게 추가할 수 있습니다. 다양한 커스터마이징 옵션과 간단한 사용법으로 프로젝트의 기능성을 향상시켜 보세요.
참고 링크: