ho un componente TSX che è un contenitore avvolgendo i suoi figli in questo modo:ReactJS dattiloscritto con i bambini
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>);
}
}
Ho anche qualche componenti puri, come questo:
// 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>);
}
I non è possibile per la vita di me capire come fare un puro componente contenitore però. La dichiarazione sembra a posto e mostra nessun errore:
// 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
perché è quello che si trova in React.Props<X>
.
Quando viene utilizzato ottengo TS2324 Proprietà 'figli' manca nel tipo 'IntrinsicAttributes & {label: string; bambini: ReactElement | stringa | numero | {} | (Reac ....
// 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>);
}
non posso dire qualcosa come il frammento di basso perché dirà Non riesci a trovare il simbolo 'LabelBox' nel modulo esterno _.tsx (è il file in cui tutti di questo codice è). non importa se ho messo la funzione o l'interfaccia prima, ma ci si sente male nel complesso comunque.
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>);
}
Qual è il modo giusto per fare un dattiloscritto pura Reagire componente in grado di prendere i bambini appena come una componente di classe completa sarebbe? È possibile? Non penso che non dovrebbe essere, è ancora una com stateless ponent e children
sono solo un tipo speciale di props
, in realtà il vero problema sembra essere lo strumento qui (Visual Studio) che non mappa il nodo di contenuto TSX al prop children
.
Come ha fatto a capire questo? C'è un posto che avrei dovuto guardare prima di fare la domanda e l'ho perso? Una query di Google a cui non avevo pensato? –
Esperienza '¯ \ _ (ツ) _/¯' – basarat
Grazie per non averlo tenuto da te allora, mi hai aiutato molto! :) –