최종 수정 : 2024-05-24
FC란
Function Component 타입의 줄임말로, React + TypeScript 조합으로 개발할 때 사용하는 함수형 컴포넌트에 타입 선언에 사용한다.
/** React.FC의 타입정의 */
type FC<P = {}> = FunctionComponent<P>;
interface FunctionComponent<P = {}> {
(props: P, context?: any): ReactNode;
propTypes?: WeakValidationMap<P> | undefined;
contextTypes?: ValidationMap<any> | undefined;
defaultProps?: Partial<P> | undefined;
displayName?: string | undefined;
}
보는 바와 같이,
- React에서 렌더링 가능한 모든 종류의 노드를 나타내는 ReactNode를 반환한다.
- props가 비어 있는 객체( { } )로 타입이 지정되어 있어, 오해를 일으킬 수 있다. 따라서, 더 명시적으로 Props의 타입을 정의하는 것이 안정적이다.
- propTypes는 주로 개발 중에 사용되며, 런타임에서는 무시되는 컴포넌트의 props에 대한 유효성 검사를 위한 propTypes 속성이 정의되어 있다.
- defaultProps 속성이 존재한다. 오버라이딩하는 데 문제가 발생할 수 있음을 의미한다.
- 개발자 도구에서 컴포넌트의 이름으로 표시되는 displayName 속성이 있다.
React.FC
import React from 'react';
type GreetingsProps = {
name: string;
};
const Greetings: React.FC<GreetingsProps> = ({ name }) => (
<div>Hello, {name}</div>
);
export default Greetings;
React.FC를 사용하면 props의 타입을 Generics로 넣어서 사용한다. 이에 대해 React.FC로 타입을 지정하는 것을 지양해야 한다는 얘기가 나오기도 한다.
왜 그럴까?
1. React.FC를 사용하면 props에 기본적으로 children이 들어 있기 때문이다.
// React.FC 사용
export const Greeting: React.FC<GreetingProps> = ({ name }) => {
return <h1>Hello {name} </h1>
}
const App = () => (
<>
<Greeting name="Stefan">
<span>{"I can set this element but it doesn't do anything"}</span> // children 전달
</Greeting>
</>
)
얼핏 보면 장점처럼 보이지만 정확한 타입을 지정해 코드의 안전성을 향상시킨다는 취지에서, FC를 사용하면 컴포넌트에 children이 있을 수 있다는 것을 가정하여 언제든지 children의 타입 지정 없이 전달 가능하므로 타입이 명확하지 않다는 단점이 있다.
따라서, 굳이 React.FC를 사용하지 않고 interface로 Props의 타입만 만들어 사용한다.
참고 자료
[TypeScript] React.FC에 사용에 대해 생각해보기
FC란? Function Component 타입의 줄임말로, React + Typescript 조합으로 개발할 때 사용하는 타입입니다. 함수형 컴포넌트 사용 시 타입 선언에 쓸 수 있도록 React에서 제공하는 타입입니다. React.FC 사용 타
shape-coding.tistory.com
[React] React React.FC | 함수형 컴포넌트 타입
React 함수형 컴포넌트의 Type을 지정하는데에 있어서 이전에 NextPage에 대해 정리했었는데, 오늘은 React.FC에 대해서 정리해보려고 한다. 그 후 ReactNode와 JSX.Element에 대해 한번에 정리하면 속시원하
fedev-kim.medium.com
'프론트엔드 > TS 공부' 카테고리의 다른 글
타입스크립트의 객체 지향 (0) | 2024.05.24 |
---|---|
HTML DOM + React 타입 정리 (0) | 2024.05.24 |
ReactNode / ReactChild / ReactElement / JSX.element (0) | 2024.05.24 |
타입스크립트 이해하기 - 타입 시스템(정적 / 동적 / 점진적) / 집합 / 호환성 / 타입 계층 (0) | 2024.05.21 |
tsconfig.json (0) | 2024.05.21 |
댓글