ฉันกำลังย้ายแอปพลิเคชัน React ไปยัง TypeScript จนถึงตอนนี้มันใช้งานได้ดี แต่ฉันมีปัญหากับประเภทการส่งคืนของrender
ฟังก์ชันตามลำดับส่วนประกอบฟังก์ชันของฉัน
จนถึงตอนนี้ผมได้ใช้เสมอJSX.Element
เป็นชนิดกลับตอนนี้ไม่ได้ทำงานใด ๆ มากขึ้นถ้าเป็นส่วนประกอบตัดสินใจที่จะไม่ทำให้อะไรคือผลตอบแทนnull
ตั้งแต่ไม่มีค่าที่ถูกต้องสำหรับnull
JSX.Element
นี่เป็นจุดเริ่มต้นของการเดินทางของฉันเพราะตอนนี้ฉันค้นหาเว็บและพบว่าคุณควรใช้ReactNode
แทนซึ่งรวมถึงnull
สิ่งอื่น ๆ ที่อาจเกิดขึ้นได้ด้วย นี่ดูเหมือนจะเป็นการเดิมพันที่ดีกว่า
อย่างไรก็ตามตอนนี้เมื่อสร้างส่วนประกอบของฟังก์ชัน TypeScript จะบ่นเกี่ยวกับReactNode
ประเภท อีกครั้งหลังจากการค้นหาบางอย่างฉันพบว่าสำหรับส่วนประกอบของฟังก์ชันคุณควรใช้ReactElement
แทน อย่างไรก็ตามหากฉันทำเช่นนั้นปัญหาความเข้ากันได้จะหายไป แต่ตอนนี้ TypeScript บ่นอีกครั้งว่าnull
ไม่ใช่ค่าที่ถูกต้อง
ดังนั้นเพื่อตัดเรื่องสั้นให้สั้นฉันมีคำถามสามข้อ:
- คือความแตกต่างระหว่างสิ่งที่
JSX.Element
,ReactNode
และReactElement
? - ทำไม
render
วิธีการของส่วนประกอบชั้นกลับReactNode
แต่ชิ้นส่วนฟังก์ชั่นกลับมาReactElement
? - ฉันจะแก้ปัญหานี้ได้
null
อย่างไร?
class Example extends Component<ExampleProps> {
กับคลาสและconst Example: FunctionComponent<ExampleProps> = (props) => {
สำหรับส่วนประกอบของฟังก์ชัน (ซึ่งExampleProps
เป็นอินเทอร์เฟซสำหรับอุปกรณ์ประกอบฉากที่คาดไว้) จากนั้นประเภทเหล่านี้มีข้อมูลเพียงพอที่จะอนุมานประเภทการส่งคืนได้