Closed devsomda closed 6 days 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 타입, 반환 타입을 직접 지정하는 형태로 타이핑해줘야 합니다.
React.FC
가 등장하고 이후 @types/react
v16.9.4에서 React.VFC
타입이 추가되었습니다.
React.FC
와 React.VFC
모두 함수 컴포넌트 지정 시 사용하며, children 타입 허용 여부에 따라 쓰임새가 달라집니다.
React.FC
: children을 사용하지 않더라도 암묵적으로 children을 허용하는 컴포넌트React.VFC
: children props이 포함되어 있지 않은 컴포넌트
type FC<P = {}> = FunctionComponent<P & { children: ReactNode }>
type VFC<P = {}> = FunctionComponent<P> // children 미포함
v18 이후 함수 컴포넌트 정의 타입 중 아래와 같은 변경점이 발생했습니다.
React.VFC
가 삭제React.FC
에서 암시적 children 제거따라서 아래의 두 가지 방식을 고려하여 함수 컴포넌트를 정의합니다.
React.VFC
대신 React.FC
사용
const Component: React.FC<{ title: string; children: React.ReactNode }> = ({ title, children }) => {
return (
<section>
<h1>{title}</h1>
<div>{children}</div>
</section>
)
}
interface ComponentProps {
title: string
children: React.ReactNode
}
const Component = ({ title, children }: ComponentProps) => {
return (
<section>
<h1>{title}</h1>
<div>{children}</div>
</section>
)
}
React.FC: 암묵적으로 children을 포함한다. React.VFC: children을 포함하지 않기 때문에, children component가 없는 경우 명확히 하기 위해 사용한다.
단, React18 이후 VFC가 삭제되고 FC가 children을 암묵적으로 포함하지 않는다. 따라서 자식이 있는 경우 타입을 지정해 사용한다.
React.FC | React.VFC | |
---|---|---|
뚯 | FuntionComponent | Void FuntionComponent |
children props 허용 여부 | O (children 포함) | X |
v18 | children 자동 포함 X ⇒ 명시적으로 정의 | 삭제 |
v18 변화 이유 ⇒ 코드 단순화와 유지 보수성
📚 251p - 252p 📌 React.FC와 React.VFC의 차이점에 대해 작성해 주세요. (optional. React 18버전 이후 달라진 점에 대해서도 설명해 주세요)