deep-dive-everything / typescript-with-react

우아한 타입스크립트 with 리액트 스터디
0 stars 0 forks source link

React.FC와 React.VFC의 차이점 #36

Closed devsomda closed 6 days ago

devsomda commented 1 week ago

📚 251p - 252p 📌 React.FC와 React.VFC의 차이점에 대해 작성해 주세요. (optional. React 18버전 이후 달라진 점에 대해서도 설명해 주세요)

hotdog1004 commented 1 week ago
kwonhygge commented 1 week ago

React.FC에서 FC는 function component의 약자입니다. 즉, React.FC는 리액트의 함수 컴포넌트를 말합니다. VFC와의 차이를 알기 위해서는 먼저 React.FC의 props에 children이 포함된다는 것을 알아야하는데요.

React.VFC에서 VFC는 void function component의 약자입니다. 존재하지 않음이라는 의미의 void가 붙었고 이는 children prop이 포함되어있지 않음을 의미합니다.

즉, React.FC와 React.VFC는 children을 허용하는 컴포넌트인지 아닌지를 구분하기 위해 존재합니다.

하지만 React 18버전으로 넘어오며 React.VFC가 삭제되었고 React.FC에서 children prop이 사라졌습니다. 그래서 이제는 React.VFC 대신 React.FC 또는 props 타입, 반환 타입을 직접 지정하는 형태로 타이핑해줘야 합니다.

samseburn commented 1 week ago

리액트 v18 이전

React.FC가 등장하고 이후 @types/react v16.9.4에서 React.VFC 타입이 추가되었습니다. React.FCReact.VFC 모두 함수 컴포넌트 지정 시 사용하며, children 타입 허용 여부에 따라 쓰임새가 달라집니다.

따라서 아래의 두 가지 방식을 고려하여 함수 컴포넌트를 정의합니다.

devsomda commented 1 week ago

React.FC: 암묵적으로 children을 포함한다. React.VFC: children을 포함하지 않기 때문에, children component가 없는 경우 명확히 하기 위해 사용한다.

단, React18 이후 VFC가 삭제되고 FC가 children을 암묵적으로 포함하지 않는다. 따라서 자식이 있는 경우 타입을 지정해 사용한다.

limejin commented 6 days ago
  React.FC React.VFC
FuntionComponent Void FuntionComponent
children props 허용 여부 O (children 포함) X
v18 children 자동 포함 X ⇒ 명시적으로 정의 삭제

v18 변화 이유 ⇒ 코드 단순화와 유지 보수성