다음과 같이 매우 간단한 기능 구성 요소가 있습니다.
import * as React from 'react';
export interface AuxProps {
children: React.ReactNode
}
const aux = (props: AuxProps) => props.children;
export default aux;
그리고 또 다른 구성 요소 :
import * as React from "react";
export interface LayoutProps {
children: React.ReactNode
}
const layout = (props: LayoutProps) => (
<Aux>
<div>Toolbar, SideDrawer, Backdrop</div>
<main>
{props.children}
</main>
<Aux/>
);
export default layout;
다음과 같은 오류가 계속 발생합니다.
[ts] JSX 요소 유형 ‘ReactNode’는 JSX 요소에 대한 생성자 함수가 아닙니다. ‘undefined’유형은 ‘ElementClass’유형에 할당 할 수 없습니다. [2605]
올바르게 입력하려면 어떻게합니까?
답변
다만 children: React.ReactNode
답변
<Aux>
JSX에서 사용하려면 을 반환하는 함수 여야합니다 ReactElement<any> | null
. 이것이 함수 컴포넌트 의 정의입니다 .
그러나 현재 React.ReactNode
는 훨씬 더 넓은 유형 인를 반환하는 함수로 정의되어 있습니다. React 타이핑은 다음과 같이 말합니다.
type ReactNode = ReactChild | ReactFragment | ReactPortal | boolean | null | undefined;
반환 된 값을 React Fragment ( <></>
) 에 래핑하여 원하지 않는 유형이 중화되었는지 확인합니다 .
const aux: React.FC<AuxProps> = props =>
<>{props.children}</>;
답변
이것은 나를 위해 일한 것입니다.
interface Props {
children: JSX.Element[] | JSX.Element
}
편집children: React.ReactNode
대신 지금 사용 하는 것이 좋습니다 .
답변
다음과 같이 구성 요소를 선언 할 수 있습니다.
const MyComponent: React.FunctionComponent = (props) => {
return props.children;
}
답변
ReactChildren
및 ReactChild
다음을 사용할 수 있습니다 .
import React, { ReactChildren, ReactChild } from 'react';
interface AuxProps {
children: ReactChild | ReactChildren;
}
const Aux = ({ children }: AuxProps) => (<div>{children}</div>);
export default Aux;
답변
TypeScript 사이트에서 : https://github.com/Microsoft/TypeScript/issues/6471
권장되는 방법은 소품 유형을 {children ?: any}로 작성하는 것입니다.
그것은 나를 위해 일했습니다. 자식 노드는 여러 가지가 될 수 있으므로 명시 적 타이핑은 대소 문자를 놓칠 수 있습니다.
https://github.com/Microsoft/TypeScript/issues/13618 에서 후속 문제에 대한 더 긴 논의가 있지만 모든 접근 방식은 여전히 작동합니다.
답변
함수 구성 요소 반환 유형은 JSXElement | null
TypeScript 로 제한됩니다 . 이것은 현재 유형 제한이며 순수한 React 는 더 많은 것을 허용합니다. 반환 유형을 합니다.
해결 방법으로 유형 어설 션 또는 조각을 사용할 수 있습니다.
const Aux = (props: AuxProps) => <>props.children</>;
const Aux2 = (props: AuxProps) => props.children as ReactElement;
ReactNode
children: React.ReactNode
에 대한 강력한 유형을 갖는 것이 목표 인 경우 차선책 일 수 있습니다 Aux
.
거의 모든 것을 현재 ReactNode
유형에 할당 할 수 있습니다 {} | undefined | null
. 케이스에 대한 더 안전한 유형은 다음과 같습니다.
interface AuxProps {
children: ReactElement | ReactElement[]
}
예:
을 감안할 Aux
필요는 요소 반작용 children
, 우리가 실수로 추가 string
그것입니다. 그런 다음 위의 솔루션 은 이와 대조적으로 오류가 발생 ReactNode
합니다. 연결된 놀이터를 살펴보십시오.
Typed children
는 Render Prop 콜백 과 같은 비 JSX props에도 유용합니다 .