次のように子をラップするコンテナーである TSX コンポーネントがあります。
import * as React from "react";
interface IProps extends React.Props<Box> {
}
interface IState {
}
export class Box extends React.Component<IProps, IState> {
render() {
return (
<div>
<h3>Check this out:</h3>
{this.props.children}
</div>);
}
}
次のような純粋なコンポーネントもあります。
// ReSharper disable once InconsistentNaming - React components must start with a capital letter.
export function LabelTest(props: { label: string }) {
return (
<div style={{ display: "flex" }}>
<label style={{ flex: "1 0 0" }}>{props.label}</label>
<div style={{ width: "auto" }}>
This is a pure component.
</div>
</div>);
}
ただし、純粋なコンテナコンポーネントを作成する方法を理解することはできません。宣言は問題ないように見え、エラーは表示されません。
// ReSharper disable once InconsistentNaming - React components must start with a capital letter.
export function LabelBox(props: { label: string, children: React.ReactNode }) {
return (
<div style={{ display: "flex" }}>
<label style={{ flex: "1 0 0" }}>{props.label}</label>
<div style={{ width: "auto" }}>
{props.children}
</div>
</div>);
}
children
React.ReactNode
それが入っているからですReact.Props<X>
。
使用すると、TS2324 Property 'children' is missing in type 'IntrinsicAttributes & { label: string; ' が表示されます。子: ReactElement | 文字列 | 数 | {} | (リアック... .
// ReSharper disable once InconsistentNaming - React components must start with a capital letter.
export function LabelNumberInput(props: { label: string, value: number }) {
return (
<LabelBox label={props.label}>
<input type="number" value={props.value} />
</LabelBox>);
}
以下のスニペットのようなことは言えません。外部モジュール _.tsx でシンボル 'LabelBox' が見つかりません(このコードのすべてが含まれるファイルです) と表示されるためです。関数を先に置くかインターフェースを先に置くかは問題ではありませんが、とにかく全体的に間違っているように感じます.
interface ILabelBoxProps extends React.Props<LabelBox> { label: string }
export function LabelBox(props: ILabelBoxProps) {
return (
<div style={{ display: "flex" }}>
<label style={{ flex: "1 0 0" }}>{props.label}</label>
<div style={{ width: "auto" }}>
{props.children}
</div>
</div>);
}
完全なクラス コンポーネントと同じように、純粋な TypeScript React コンポーネントが子を取得できるようにする正しい方法は何ですか? これは可能ですか?そうあるべきではないと思います.これはまだステートレスなコンポーネントであり、children
特別な種類の.props
children