2차 프로젝트에서 달력을 만들어보고자 했다.
코치님께서는 직접 만들어보는 것도 좋은 경험이 될 것이라고 해주셨는데
프로젝트 기간이 정해져있다보니 시간이 얼마나 걸릴지 몰라서 우선은 라이브러리를 사용했다
직접 달력을 만들어보는 작업은 나중에...!
FullCalender 라이브러리를 사용해서 캘린더를 만들어보았다
< 주요 기능 >
- 이미지 넣기
- 주말에 색 넣기
- 날짜 포맷
- 이미지 클릭하면 값 변경
- 다른 달로 넘어갔다가 today 버튼을 누르면 오늘 날짜의 값으로 변경하기
- 비어있는 날짜 클릭해도 값 띄우기
1. FullCalender 라이브러리 설치
FullCalender 라이브러리 사용을 위해서는 npm으로 설치가 필요하다.
가장 많이 사용되는 react, daygrid만을 설치했다.
npm install --save @fullcalendar/react @fullcalendar/daygrid
2. FullCalender 라이브러리 사용
import FullCalendar from '@fullcalendar/react';
import dayGridPlugin from '@fullcalendar/daygrid';
import interactionPlugin from '@fullcalendar/interaction';
<FullCalendar
defaultView="dayGridMonth"
plugins={[ dayGridPlugin, interactionPlugin ]}
eventContent={renderEventContent}
titleFormat={function(date) {
return date.date.year +"년 "+(date.date.month +1)+"월" }}
eventBackgroundColor='transparent'
eventBorderColor='transparent'
events={eventData}
datesSet={(e) => handleDatesSet(e)}
height="550px"
/>
- eventContent
캘린더 내 이벤트 내용에 들어갈 값을 넣어준다.
프로젝트에서는 이미지를 넣기 위해서 img 태그를 넣었다.
const renderEventContent = (eventInfo) => {
return (
<img className="check-image" src={check} alt="check"
onClick={() => handleCheckClick(eventInfo.event)}
width="40%"
style={{ display: 'block', margin: '0 auto' }}
/>
)
}
- events
이벤트를 적용할 데이터들을 넣어준다.
const eventData = [
{title: 'event 1', date: "2023-10-12"},
{title: 'event 2', date: "2023-11-04"},
{title: 'event 1', date: "2023-11-12"},
{title: 'event 2', date: "2023-11-14"},
{title: 'event 3', date: "2023-11-21"}
]
- dateClick
이미지가 없는, 비어있는 날짜를 클릭할 때는 값이 없다는 것을 보여주도록 구현했다.
이 부분을 위해서 interaction 모듈도 필요했다.
dateClick={(info) => {
setHabitList(() => ({
date: info.dateStr,
habit1: "달성한 습관이 없습니다😭"
}))
}}
- datesSet
기본 설정으로는 '월' 전환 버튼을 클릭하면 이번 달 페이지로 넘어오는 것이 전부이다.
프로젝트에서는 '월' 전환 버튼을 누르면 오늘 날짜의 값을 가져올 수 있도록 구현했다.
datesSet으로 가져오는 값에는 해당 달력의 시작 날짜와 마지막 날짜가 startStr, endStr 값으로 들어있다.
렌더링된 달력의 달과 오늘 날짜의 달을 비교해서 일치한다면 오늘 날짜의 값을 가져오도록 했다.
const handleDatesSet = (e) => {
const startDate = new Date(e.startStr);
const endDate = new Date(e.endStr);
const middleDate = new Date(startDate.getTime()
+ (endDate.getTime() - startDate.getTime()) / 2);
const middleMonth = middleDate.getMonth() + 1;
if (middleMonth === new Date().getMonth() + 1) {
setHabitList(habitlist.habitlist)
}
};
- height
캘린더 길이 설정
참고자료
https://fullcalendar.io/docs/react
반응형
'IT Study > React' 카테고리의 다른 글
[Front/React] react-error-boundary 라이브러리로 에러 처리하기 (0) | 2023.12.09 |
---|---|
[Front/React] useMemo()로 효율적으로 관리하기 (1) | 2023.12.08 |
[Front/React] 프론트엔드 쿠키 & JWT토큰 응답/요청 (1) | 2023.12.02 |
[Front/React] 이미지 미리보기 FileReader vs createObjectURL (+ 코드) (1) | 2023.11.24 |
[Front/React] useRef (+ 실습예제) (1) | 2023.11.24 |