Şu anda bir React uygulamasını TypeScript'e geçiriyorum. Şimdiye kadar, bu oldukça iyi çalışıyor, ancak renderişlevlerimin ve işlev bileşenlerimin dönüş türleriyle ilgili bir sorunum var .
Şimdiye kadar, hep kullanmıştı JSX.Elementbir bileşen karar verirse şimdi bu artık çalışmıyor, dönüş türü olarak değil bir şey, yani geri dönüşü hale nullberi nullhiçbir geçerli bir değerdir JSX.Element. Bu benim yolculuğumun başlangıcıydı, çünkü şimdi internette arama yaptım ve ReactNodebunun yerine kullanmanız gerektiğini buldum , bu da nullolabilecek birkaç şeyi ve ayrıca olabilecek birkaç şeyi de içeriyor . Bu daha iyi bir bahis gibi görünüyordu.
Ancak, şimdi bir işlev bileşeni oluştururken, TypeScript türden şikayet ediyor ReactNode. Yine, biraz araştırdıktan sonra, bunun yerine işlev bileşenleri için kullanmanız gerektiğini buldum ReactElement. Ancak, bunu yaparsam uyumluluk sorunu ortadan kalktı, ancak şimdi TypeScript yine nullgeçerli bir değer olmadığından şikayet ediyor .
Yani, uzun lafın kısası, üç sorum var:
- Ne arasındaki farktır
JSX.Element,ReactNodeveReactElement? - Neden
rendersınıf bileşenlerinin yöntemleri geri dönerkenReactNode, işlev bileşenleri geri dönüyorReactElement? - Bunu ile ilgili olarak
nullnasıl çözerim ?
class Example extends Component<ExampleProps> {Sınıflar veconst Example: FunctionComponent<ExampleProps> = (props) => {işlev bileşenleri gibi bir şeye benzemelidir (buradaExamplePropsbeklenen aksesuarlar için bir arayüz bulunur). Ve sonra bu türler, dönüş türünün çıkarılabileceği konusunda yeterli bilgiye sahiptir.