- React의 Ant Design
- Ant Design of React
- Ant Design of React
- v5.21.3Changelog
- 기본 사용법
- 如何使用
- 迁移
- Basic Usage
- 고급기능
- 进阶使用
- Advanced
- Migration
- 其他
- Other
커스텀 날짜 라이브러리 사용하기
기본적으로 Ant Design은 시간과 날짜를 다루기 위해 Day.js를 사용하고 있습니다.
Day.js는 동일한 API를 사용하는 Moment.js를 대체하는 불변적인 date-time 라이브러리입니다.
다른날짜 라이브러리를 사용하고싶다면 (Ant design은 현재 다음 라이브러리를 지원합니다. moment, date-fns, luxon). 우리는 커스터마이징하는 두가지 방법을 제공합니다:
첫 번째 방법은 Picker 컴포넌트를 만드는걸 도와주는 generatePicker
(또는 generateCalendar
)를 사용하는 것입니다.
첫째로, create-react-app
로 antd 데모를 초기화 합니다. First, we initialize an antd demo with create-react-app
. create-react-app 사용법을 참조하거나, 다음에서 직접 시작할 수 있습니다.antd 초기화
Create src/components/DatePicker.tsx
.
예시:
import { DatePicker } from 'antd';import type { Moment } from 'moment';import momentGenerateConfig from 'rc-picker/lib/generate/moment';const MyDatePicker = DatePicker.generatePicker<Moment>(momentGenerateConfig);export default MyDatePicker;
Create src/components/TimePicker.tsx
.
예시:
import * as React from 'react';import type { PickerTimeProps } from 'antd/es/date-picker/generatePicker';import type { Moment } from 'moment';import DatePicker from './DatePicker';export interface TimePickerProps extends Omit<PickerTimeProps<Moment>, 'picker'> {}const TimePicker = React.forwardRef<any, TimePickerProps>((props, ref) => (<DatePicker {...props} picker="time" mode={undefined} ref={ref} />));TimePicker.displayName = 'TimePicker';export default TimePicker;
Create src/components/Calendar.tsx
.
예시:
import { Calendar } from 'antd';import type { Moment } from 'moment';import momentGenerateConfig from 'rc-picker/es/generate/moment';const MyCalendar = Calendar.generateCalendar<Moment>(momentGenerateConfig);export default MyCalendar;
Create src/components/index.tsx
.
예시:
export { default as Calendar } from './Calendar';export { default as DatePicker } from './DatePicker';export { default as TimePicker } from './TimePicker';
Modify src/App.tsx
,import moment
and custom component.
- import { DatePicker, Calendar } from 'antd';- import format from 'dayjs';+ import { DatePicker, TimePicker, Calendar } from './components';+ import format from 'moment';
또한 다른 구현도 제공하고 있는데, @ant-design/moment-webpack-plugin
으로 구현하며, 기존 코드를 전혀 변경하지 않고 moment
를 Day.js
로 직접 대체하는 것입니다. 자세한 내용은 @ant-design/moment-webpack-plugin에서 확인할 수 있습니다.
// webpack-config.jsconst AntdMomentWebpackPlugin = require('@ant-design/moment-webpack-plugin');module.exports = {// ...plugins: [new AntdMomentWebpackPlugin()],};
date-fns는 현재 dayjs
와 유사한 커스텀 컴포넌트 메소드를 제공합니다. 다른점은 사용되는 매개변수 타입이 다르다는 것입니다. 이 지원은 antd 4.5.0 버전 이상에서 제공됩니다.
예시:
src/components/DatePicker.tsx
를 생성하세요.
다음과 같이 코드를 작성하세요:
import { DatePicker } from 'antd';import dateFnsGenerateConfig from 'rc-picker/lib/generate/dateFns';const MyDatePicker = DatePicker.generatePicker<Date>(dateFnsGenerateConfig);export default MyDatePicker;
antd 5.4.0
부터, dayjs
대신 luxon를 사용할 수 있으며, 동일한 기능을 지원합니다. 그러나 동작의 다른 점을 소개하고 있습니다. 아래에서 설명하겠습니다.
src/components/DatePicker.tsx
파일을 생성하고, 다음과 같이 luxon에 기반한 피커를 만드세요:
import { DatePicker } from 'antd';import type { DateTime } from 'luxon';import luxonGenerateConfig from 'rc-picker/lib/generate/luxon';const MyDatePicker = DatePicker.generatePicker<DateTime>(luxonGenerateConfig);export default MyDatePicker;
luxon 사용자들은 luxon이 지역화를 위한 사용자 정의 구현을 제공하지 않는다는 점을 잘 알고 있어야 합니다. 대신, 브라우저의 기본 Intl API에 의존합니다.
이로 인해 다른 날짜 라이브러리와의 포맷에 몇 가지 차이점이 생겼습니다. 오늘부터 주요 차이점은 다음과 같습니다:
luxon 설정을 조정하여 이러한 기본 luxon 동작을 사용자 정의할 수 있습니다:
import { DatePicker } from 'antd';import type { DateTime } from 'luxon';import luxonGenerateConfig from 'rc-picker/lib/generate/luxon';const customLuxonConfig = {...luxonGenerateConfig,getWeekFirstDay(locale) {// 여기에 사용자 정의 구현을 작성하세요},};const MyDatePicker = DatePicker.generatePicker<DateTime>(customLuxonConfig);export default MyDatePicker;
이러한 사용자 정의를 수행하면 결과적으로 DatePicker의 동작이 예상치 못한 방식으로 변경될 수 있으므로 반드시 예외 상황에 대해 테스트해야 합니다.