Використовуючи 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
у аргументі props буде вказана функція ванілі .
Тож питання полягає в тому, як ми повинні використовувати дітей у функціональному компоненті без стану у TypeScript?
Я міг би повернутися до колишнього способу MyProps extends React.Props
, але Props
інтерфейс позначений як застарілий , а компоненти без громадянства не мають або підтримують, Props.ref
як я розумію.
Тож я міг визначити children
реквізит вручну:
interface MyProps {
children?: React.ReactNode;
}
По-перше: це ReactNode
правильний тип?
По-друге: я повинен писати діти як необов’язкові ( ?
), інакше споживачі вважатимуть, що children
це атрибут компонента ( <MyStatelessComponent children={} />
), і викликатиме помилку, якщо не буде вказано значення.
Здається, мені чогось не вистачає. Хтось може пояснити, чи мій останній приклад - це спосіб використання функціональних компонентів без громадянства з дітьми в React?
@types