-
react-hook-form의 getValues와 setValue를 이용하여 커스텀 훅을 만들때 Path<T> 에러React.js/React-hook-form 2023. 10. 30. 15:43728x90
Emoji 부분을 comment 와 comment 답글 그리고 post글 작성시에 쓰기 때문에 중복 코드가 발생할것으로 생각들어
useEmoji 라는 커스텀훅을 react-hook-form의 getValue와 setValue를 이용하여 만들려고 했는데,
제네릭으로 field name을 받아와서 사용하게끔 만드는데,
import { EmojiClickData } from 'emoji-picker-react'; import { useState } from 'react'; import { UseFormGetValues, UseFormSetValue, FieldValues, } from 'react-hook-form'; export const useEmoji = <T extends FieldValues>( getValues: UseFormGetValues<T>, setValue: UseFormSetValue<T>, ) => { const [isEmoji, setIsEmoji] = useState<boolean>(false); const handleEmojiView = () => { setIsEmoji(!isEmoji); }; const handlesetValueAddEmoji = ( emojiData: EmojiClickData, valueKey: string, ) => { const currentComment = getValues(valueKey); // 현재 입력된 댓글을 가져옴 setValue(valueKey, currentComment + emojiData.emoji); handleEmojiView(); }; return { isEmoji, setIsEmoji, handleEmojiView, }; };
UseFormGetValue와, UseFormSetValue의 type d.ts를 보고 FieldValues를 제네릭에 extends 해주고 쓰면 될줄 알았는데,
getValues를 사용할때 Path<T>와 string타입이 다르다는 에러가 발생함.
아래와 같이 수정하여 해결했다 ㅠㅠ
import { EmojiClickData } from 'emoji-picker-react'; import { useState } from 'react'; import { UseFormGetValues, UseFormSetValue, FieldValues, FieldPath, PathValue, } from 'react-hook-form'; export const useEmoji = <T extends FieldValues>( getValues: UseFormGetValues<T>, setValue: UseFormSetValue<T>, ) => { const [isEmoji, setIsEmoji] = useState<boolean>(false); const handleEmojiView = () => { setIsEmoji(!isEmoji); }; const handlesetValueAddEmoji = ( emojiData: EmojiClickData, valueKey: FieldPath<T>, ) => { const currentComment = (getValues(valueKey) + emojiData.emoji) as PathValue< T, FieldPath<T> >; // 현재 입력된 댓글과 emoji를 합쳐줌. setValue(valueKey, currentComment); handleEmojiView(); }; return { isEmoji, setIsEmoji, handleEmojiView, handlesetValueAddEmoji, }; };
FieldPath라는놈을 써야함
-Reference
https://github.com/orgs/react-hook-form/discussions/8025
728x90'React.js > React-hook-form' 카테고리의 다른 글
watch 메서드를 활용하여 감시하기 (0) 2024.07.30 react-hook-form에서 useController 커스텀 훅 사용 (0) 2024.06.25 react-hook-form Controller를 이용하여 재사용 컴포넌트를 만들때 control props 전달 타입체커 환경 에러 (0) 2024.05.11 react-hook-form Controller 사용시 rules validate가 동작하지 않을때 (0) 2024.05.11 react-hook-form과 다른 라이브러와 함께 사용 (0) 2024.05.02