강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

mhr님의 프로필 이미지
mhr

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

로그인 폼 만들기

Typescript 타이핑 질문입니다.

작성

·

145

0

얼마 전에 제로초님 타입스크립트 강좌를 들어서 거기서 배운 걸 이 강좌의 코드에 적용해보고 있습니다. 

NodeBird 컴포넌트의 경우 아래처럼 작성했는데요. 

const NodeBird: React.FC<{ Component: React.ComponentType }> = ({ Component }) => {
  return (
    <>
      <Head>
        <meta charSet="utf-8" />
        <title>NodeBird</title>
      </Head>
      <Component />
    </>
  )
}

export default NodeBird;

강의에 나온 PropTypes를 이용한 코드에서는 

NodeBird.propTypes = {
  Component: PropTypes.elementType.isRequired
}

위와 같이 작성하셨는데, 혹시 타입스크립트에서는 어떤 식으로 작성해야할까요? 타이핑을 해줄 때 Props의 타입에 따로 null을 처리해주지 않은 것만으로도 충분할까요?

그리고 한 가지 질문이 더 있는데요. 

LoginForm 코드에서 onChangeId를 타이핑할 때 

const onChangeId = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {
  setId(e.target.value);
}, []);

 위와 같이 진행했는데, React.ChangeEvent가 generic으로 HTMLInputElement를 받는 것이 맞나요? antd의 Input을 넣었더니 e.target.value 에서 에러가 나더라고요. 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

타입스크립트에서는 propTypes를 쓰지 않아서 지금처럼만 하시면 됩니다.

아래의 경우는 e.currentTarget.value 쓰셔야합니나.

mhr님의 프로필 이미지
mhr
질문자

감사합니다! 저 혹시 e.target과 e.currentTarget이 정확히 어떻게 다른지 알려주실 수 있을까요? 검색해봤을 때 나오는 onclick 이벤트를 이용해서 설명한 예제에서는 e.currentTarget은 click event가 발생한 element를 포함하고 있는 body element를 가리키는 것으로 나오고, e.target은 구체적으로 click event가 발생한 element를 가리키더라고요. Input element의 경우, 특히 위의 경우처럼 value를 처리해야하는 경우에는 e.target.value와 e.currentTarget.value에 어떤 차이가 있나요? 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

currentTarget은 이벤트를 단 태그이고, 타겟은 이벤트가 발생한 태그입니다. 버블링 캡처링때문에 발생한 태그와 이벤트를 단 태그가 다를 수 있습니다. 인풋류는 커런트타겟해도 됩니다.

mhr님의 프로필 이미지
mhr

작성한 질문수

질문하기