<If />
React를 사용하여 간단한 함수 구성 요소를 만들었습니다 .
import React, { ReactElement } from "react";
interface Props {
condition: boolean;
comment?: any;
}
export function If(props: React.PropsWithChildren<Props>): ReactElement | null {
if (props.condition) {
return <>{props.children}</>;
}
return null;
}
다음과 같은 깔끔한 코드를 작성할 수 있습니다.
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
대부분의 경우 잘 작동하지만 주어진 변수가 정의되어 있지 않은지 확인한 다음 속성으로 전달하려면 문제가됩니다. 예를 들어 보겠습니다.
<Animal />
다음 소품 이있는 구성 요소가 있다고 가정 해 봅시다 .
interface AnimalProps {
animal: Animal;
}
이제 다음 DOM을 렌더링하는 다른 구성 요소가 있습니다.
const animal: Animal | undefined = ...;
return (
<If condition={animal !== undefined} comment="if animal is defined, then present it">
<Animal animal={animal} /> // <-- Error! expected Animal, but got Animal | undefined
</If>
);
내가 언급했듯이 실제로는 동물이 정의되어 있지 않지만 Typescript에 이미 확인했다고 말할 방법이 없습니다. 주장 animal!
은 효과가 있지만 그것은 내가 찾고있는 것이 아닙니다.
어떤 아이디어?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
작동 할 것입니다