React.js
react-date-picker 사용하여 time-picker 재사용 컴포넌트 만들기
Dev갱이
2024. 7. 27. 13:44
728x90
<form>
<label for="appt-time">Choose an appointment time: </label>
<input id="appt-time" type="time" name="appt-time" step="600" />
</form>
input의 type time을 사용 했을 때 30분 간격으로 선택지를 주거나 할 때 step이란 속성을 주면 된다고 나와있지만 실제로 사용 해보면 정상적으로 동작하지 않는다.
react-date-picker에서 showTimeSelectOnly 옵션을 활용하여 재사용 컴포넌트 time-picker 생성
interface Props<T extends Record<string, any>> {
control: Control<T>;
name: Path<T>;
validationOptions?: Omit<
RegisterOptions<T, Path<T>>,
'valueAsNumber' | 'valueAsDate' | 'setValueAs' | 'disabled'
>;
}
const TimePicker = <T extends Record<string, any>>(props: Props<T>) => {
const { control, name, validationOptions } = props;
const {
field,
fieldState: { invalid, isTouched, isDirty, error },
formState: { touchedFields, dirtyFields },
} = useController({
name,
control,
rules: { ...validationOptions },
});
return (
<DatePicker
className={styles.datePicker}
locale={ko}
showTimeSelect
showTimeSelectOnly
timeIntervals={30}
timeCaption="Time"
dateFormat="HH:mm"
selected={field.value}
onChange={field.onChange}
timeClassName={d => {
return styles.unselectedDay;
}}
></DatePicker>
);
};
export default TimePicker;
react-hook-form의 control와 useController 훅을 이용하여 보다 편리하게 handling 할 수 있다.
- 호출 부분
... 중략
const {
register,
formState: { errors, isValid },
handleSubmit,
reset,
getValues,
watch,
control,
setValue,
} = useForm({
mode: 'onChange',
});
... 중략
<TimePicker control={control} name="testStartTime"></TimePicker>
Reference
- (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time#step)
728x90