TypeScriptをReactで使用React.Props
すると、コンパイラがすべてのReactコンポーネントの小道具に子を含めることができることを認識するために拡張する必要がなくなります。
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:プロパティ「children」はタイプ「MyProps」に存在しません。
これは、バニラ関数がchildren
props引数で指定されることをコンパイラーが知る方法が実際にはないためだと思います。
では、問題は、TypeScriptのステートレス関数型コンポーネントで子をどのように使用する必要があるかということです。
以前の方法に戻ることもできますMyProps extends React.Props
が、Props
インターフェイスは非推奨としてマークされており、ステートレスコンポーネントはProps.ref
、私が理解しているように、を持っていないか、サポートしていません。
したがって、children
小道具を手動で定義できます。
interface MyProps {
children?: React.ReactNode;
}
まず:ReactNode
正しいタイプですか?
2番目:子をオプション(?
)として記述する必要があります。そうしないと、コンシューマーはそれchildren
がコンポーネント()の属性であると考え<MyStatelessComponent children={} />
られ、値が指定されていない場合はエラーが発生します。
何かが足りないようです。私の最後の例がReactの子でステートレス機能コンポーネントを使用する方法であるかどうかについて誰かが明確にすることができますか?
@types