TypeScript'i React ile birlikte React.Props
kullandığımızda, derleyicinin tüm react bileşen props'larının çocuklara sahip olabileceğini bilmesi için artık genişletmemize gerek yok :
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
Ancak, durum bilgisi olmayan işlevsel bileşenler için durum böyle görünmüyor:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Derleme hatasını yayar:
Hata: (102, 17) TS2339: "Çocuk" özelliği "MyProps" türünde mevcut değil.
Sanırım bunun nedeni derleyicinin children
props argümanında bir vanilya fonksiyonunun verileceğini bilmesinin bir yolu olmamasıdır .
Öyleyse soru, TypeScript'teki durumsuz bir işlevsel bileşende çocukları nasıl kullanmalıyız?
Eski yöntemine geri dönebilirdim MyProps extends React.Props
, ancak Props
arayüz kullanımdan kaldırıldı olarak işaretlendi ve durum bilgisiz bileşenlerde Props.ref
anladığım kadarıyla a yok veya destek yok.
Böylece children
pervaneyi manuel olarak tanımlayabilirim :
interface MyProps {
children?: React.ReactNode;
}
İlk olarak: ReactNode
doğru tip mi?
İkincisi: Çocukları isteğe bağlı ( ?
) olarak yazmalıyım, aksi takdirde tüketiciler bunun component ( ) ' nin children
bir özelliği olduğunu düşünecek <MyStatelessComponent children={} />
ve bir değer verilmemişse bir hata ortaya çıkaracaktır .
Görünüşe göre bir şey kaçırıyorum. Son örneğimin React'teki çocuklarla vatansız işlevsel bileşenleri kullanmanın yolu olup olmadığı konusunda biraz netlik sağlayabilir mi?
@types