<If />
React kullanarak basit bir işlev bileşeni yaptım :
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;
}
Daha temiz bir kod yazmama izin veriyor, örneğin:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
Çoğu durumda, iyi çalışır, Ama örneğin belirli bir değişken tanımlanmamış olup olmadığını kontrol etmek ve sonra özellik olarak geçirmek istiyorum, bir sorun haline gelir. Bir örnek vereceğim:
Diyelim ki <Animal />
, aşağıdaki Props'lara sahip bir bileşenim var :
interface AnimalProps {
animal: Animal;
}
ve şimdi aşağıdaki DOM oluşturan başka bir bileşen var:
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>
);
Benim yorumladığım gibi, aslında hayvan tanımlanmamış, daha önce kontrol ettiğim gibi Typescript'e söylemem mümkün değil. İddiası animal!
işe yarayacaktır, ama aradığım şey bu değil.
Herhangi bir fikir?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
işe