Closed lulla-by closed 8 months ago
React.createElement()
메서드를 통해 생성된 리액트 컴포넌트를 나타내는 타입입니다.props
, 그리고 children
을 포함합니다.ReactElement
뿐만 아니라 문자열, 숫자, 배열 등의 다양한 타입을 포함할 수 있습니다.ReactNode
를 사용할 수 있습니다.
ReactElement
의 특정 타입으로, props
와 타입 필드를 any
로 가지는 타입입니다.props
로 전달받아 render props
패턴으로 컴포넌트를 구현할 때 유용하게 활용할 수 있습니다.
요약하자면, ReactElement
는 컴포넌트를 직접 생성할 때 사용되며, ReactNode
는 다양한 타입의 데이터를 처리할 때 사용됩니다. JSX.Element
는 render props
패턴을 사용할 때 유용합니다.
1. ReactElement
ReactElement는 React 요소를 나타내는 인터페이스입니다. React 요소는 React 컴포넌트의 가장 작은 단위로, 화면에 렌더링 될 수 있는 것을 의미합니다. ReactElement는 주로 React 컴포넌트의 반환 타입으로 사용됩니다. 예를 들어, 함수형 컴포넌트나 클래스 컴포넌트에서 render 메서드는 ReactElement를 반환합니다.
const MyComponent: React.FC = (): React.ReactElement => {
return <div>Hello World</div>;
};
2. ReactNode
ReactNode는 ReactElement보다 더 넓은 범위의 타입입니다. ReactNode는 ReactElement, 문자열, 숫자, 배열, fragment, boolean 등을 포함할 수 있습니다. 즉, React 컴포넌트가 반환할 수 있는 거의 모든 것을 포함합니다. ReactNode는 컴포넌트가 다양한 타입의 자식을 반환할 수 있을 때 사용됩니다.
const MyComponent: React.FC = (): React.ReactNode => {
return <div>{someCondition ? "Text" : <OtherComponent />}</div>;
};
3. JSX.Element
JSX.Element는 TypeScript가 JSX를 사용할 때 정의하는 타입입니다. 이는 기본적으로 ReactElement와 동일하지만, JSX 문법을 사용하는 경우에 한해 적용됩니다. 주로 JSX 문법을 사용하는 함수나 컴포넌트의 반환 타입으로 사용됩니다.
const MyComponent = (): JSX.Element => {
return <div>Hello World</div>;
};
📝 사용 예시
React.ReactNode
React.ReactElement
와 string, boolean, number 등 넓은 범주의 타입을 포함하는 타입React.ReactElement
createElement
메서드 호출로 생성된 리액트 엘리먼트를 나타내는 타입JSX.Element
보다 구체적으로 사용. 리액트 컴포넌트의 props 타입을 제네릭으로 지정하기 위해 사용JSX.Element
React.ReactElement
의 특정 타입이면서 제네릭으로 props와 타입 필드에 대해 any 타입을 가지는 타입리액트는 ReactElement 객체를 읽어서 DOM을 구성하며, ReactElement는 createElement 메서드 호출로 생성된 리액트 엘리먼트를 나타내는 타입입니다. ReactElement 주로 React의 내부 동작을 다루거나 추론 관점에서 JSX.Element 대신 더 유용하게 활용하고 싶을 때 ReactElement를 사용합니다.
JSX.Element 는 React.ReactElement를 확장하고 있는 타입이며 이러한 특성으로 컴포넌트 타입을 재정의 하거나 변경하는 것이 용이합니다. JSX.Element는 리액트 엘리먼트를 prop으로 전달받아 render props 패턴으로 컴포넌트를 구현할 때 유용하게 사용합니다.
ReactNode는 리액트의 render 함수가 반환할 수 있는 모든 형태를 담고 있습니다. ReactNode는 render함수가 반환할 수 있는 모든 형태를 담고 있기 때문에 리액트 컴포넌트가 가질 수 있는 모든 타입을 의미합니다. 이런 특성상 주로 children의 타입을 명시할때 주로 사용되며 prop으로 리액트 컴포넌트가 다양한 형태를 가질 수 있도록 만드는 경우 사용합니다.
📝 p255
❓
ReactElement
,ReactNode
,JSX.Element
는 모두 리액트의 요소를 나타내는 타입입니다. 이 세가지 타입의 차이점과 어떤 상황에서 각 타입을 사용하는지 간략하게 적어주세요.