- 결혼식 날짜를 텍스트로만 날짜를 표시하는 것보다 캘린더를 통해 시각적으로 결혼 날짜를 강조했습니다.
bunx --bun shadcn@latest add calendar
- shadcn UI Calendar는 react-day-picker를 사용하고 있어 설치하였습니다.
- 불변성에 뛰어나 사용하였습니다.
- TypeScript 지원이 우수하기에 사용하였습니다.
import { Calendar } from '@/common/components/ui/calendar';
import { WEDDING_DATE } from '../../config';
import { parse } from 'date-fns';
import { ko } from 'date-fns/locale';
export default function CalendarScreen() {
const weddingDate = parse(WEDDING_DATE, 'yyyy.MM.dd', new Date());
return (
<>
<h2 className='text-center text-xl font-en'>calendar</h2>
<div className='flex justify-center my-4'>
<img src='/ring.png' alt='반지' className='w-6 h-6 aspect-square' />
</div>
<div className='max-w-[400px] mx-auto md:max-w-[500px] lg:max-w-full'>
<Calendar
mode='single'
selected={weddingDate}
locale={ko}
defaultMonth={weddingDate}
disabled={(date) =>
date < new Date('2025-01-01') || date > new Date('2025-12-31')
}
/>
</div>
</>
);
}
-
date-fns
parse
함수는 문자열 형태에 날짜를 객체로 반환해줍니다.
- 날짜 형식이
yyyy-MM-dd
지정하여 2025.01.01 형태의 문자열을 파싱합니다.
- Calendar 속성
-
mode = 'single'
=> 단일 날짜만 선택 가능하도록 설정합니다.
-
selected={weddingDate}
=> 결혼 날짜를 미리 선택된 상태로 표시합니다.
-
locale={ko}
=> 한국어 로케일을 사용하여 요일과 월 이름을 한글로 표시합니다.
-
defaultMonth={weddingDate}
=> 캘린더가 처음 표시될 때 결혼 날짜가 있는 월을 보여줍니다.
-
disabled
=> 2025년 이외의 날짜는 선택할 수 없도록 비활성화합니다.