การใช้ TypeScript กับ React เราไม่จำเป็นต้องขยายอีกต่อไปReact.Props
เพื่อให้คอมไพเลอร์รู้ว่าอุปกรณ์ประกอบฉากส่วนประกอบปฏิกิริยาทั้งหมดสามารถมีลูกได้:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
อย่างไรก็ตามดูเหมือนว่าจะไม่ใช่กรณีสำหรับส่วนประกอบการทำงานที่ไร้สถานะ:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
แสดงข้อผิดพลาดในการคอมไพล์:
ข้อผิดพลาด: (102, 17) TS2339: ไม่มีคุณสมบัติ 'ลูก' ในประเภท 'MyProps'
ฉันเดาว่านี่เป็นเพราะไม่มีทางที่คอมไพเลอร์จะรู้ว่าฟังก์ชันวานิลลาจะได้รับchildren
ในอาร์กิวเมนต์อุปกรณ์ประกอบฉาก
คำถามคือเราจะใช้ลูกในองค์ประกอบการทำงานที่ไร้สัญชาติใน TypeScript ได้อย่างไร?
ฉันสามารถกลับไปใช้วิธีเดิมMyProps extends React.Props
ได้ แต่Props
อินเทอร์เฟซถูกทำเครื่องหมายว่าเลิกใช้งานแล้วและส่วนประกอบที่ไม่มีสถานะไม่มีหรือรองรับ a Props.ref
ตามที่ฉันเข้าใจ
ดังนั้นฉันสามารถกำหนดchildren
เสาด้วยตนเอง:
interface MyProps {
children?: React.ReactNode;
}
อันดับแรก: เป็นReactNode
ประเภทที่ถูกต้องหรือไม่?
ประการที่สอง: ฉันต้องเขียนเด็กเป็นตัวเลือก ( ?
) ไม่เช่นนั้นผู้บริโภคจะคิดว่าสิ่งchildren
นั้นควรเป็นแอตทริบิวต์ขององค์ประกอบ ( <MyStatelessComponent children={} />
) และเพิ่มข้อผิดพลาดหากไม่ได้ระบุค่าไว้
ดูเหมือนว่าฉันจะขาดอะไรไป ใครสามารถให้ความชัดเจนได้บ้างว่าตัวอย่างสุดท้ายของฉันเป็นวิธีใช้ส่วนประกอบที่ใช้งานได้แบบไม่ระบุสถานะกับลูก ๆ ใน React หรือไม่?
@types