-
react-date-picker 사용하여 time-picker 재사용 컴포넌트 만들기React.js 2024. 7. 27. 13:44728x90
<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'React.js' 카테고리의 다른 글
팩토리 패턴을 이용하여 동적 탭 메뉴 리스트 만들기 (0) 2024.08.10 react 이미지 편집 라이브러리 (0) 2024.08.06 태그된 유니온과 커스텀 타입가드를 이용한 다른 컴포넌트 랜더링 (0) 2024.07.20 true/false toggle 메뉴 구현시 useReducer로 구현하기 (0) 2024.06.27 특정한 state 값에 따른 다른 페이지 랜더링을 효율적으로 랜더링 하는 방법에 대해 (0) 2024.05.19