Tôi đã tạo một <If />
thành phần chức năng đơn giản bằng 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;
}
Nó cho phép tôi viết một mã sạch hơn, chẳng hạn như:
render() {
...
<If condition={truthy}>
presnet if truthy
</If>
...
Trong hầu hết các trường hợp, nó hoạt động tốt, nhưng khi tôi muốn kiểm tra ví dụ nếu một biến đã cho không được xác định và sau đó chuyển nó thành thuộc tính, nó sẽ trở thành một vấn đề. Tôi sẽ đưa ra một ví dụ:
Giả sử tôi có một thành phần được gọi là <Animal />
có các Đạo cụ sau:
interface AnimalProps {
animal: Animal;
}
và bây giờ tôi có một thành phần khác biểu hiện DOM sau:
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>
);
Như tôi đã nhận xét, mặc dù trên thực tế động vật không được xác định, tôi không có cách nào để nói với Bản mô tả rằng tôi đã kiểm tra nó. Khẳng định animal!
sẽ có hiệu quả, nhưng đó không phải là điều tôi đang tìm kiếm.
Có ý kiến gì không?
<Animal animal={animal as Animal} />
{animal !== undefined && <Anibal animal={animal} />}
sẽ hoạt động