Al usar TypeScript con React, ya no tenemos que extendernos React.Props
para que el compilador sepa que todos los accesorios de los componentes react pueden tener hijos:
interface MyProps { }
class MyComponent extends React.Component<MyProps, {}> {
public render(): JSX.Element {
return <div>{this.props.children}</div>;
}
}
Sin embargo, no parece ser el caso de los componentes funcionales sin estado:
const MyStatelessComponent = (props: MyProps) => {
return (
<div>{props.children}</div>
);
};
Emite el error de compilación:
Error: (102, 17) TS2339: La propiedad 'children' no existe en el tipo 'MyProps'.
Supongo que esto se debe a que realmente no hay forma de que el compilador sepa que se va a dar una función de vainilla children
en el argumento props.
Entonces, la pregunta es ¿cómo deberíamos usar los niños en un componente funcional sin estado en TypeScript?
Podría volver a la forma anterior de MyProps extends React.Props
, pero la Props
interfaz está marcada como obsoleta y los componentes sin estado no tienen ni admiten una Props.ref
como yo la entiendo.
Entonces podría definir el children
accesorio manualmente:
interface MyProps {
children?: React.ReactNode;
}
Primero: ¿es ReactNode
el tipo correcto?
Segundo: tengo que escribir child como opcional ( ?
) o los consumidores pensarán que children
se supone que es un atributo del componente ( <MyStatelessComponent children={} />
) y generarán un error si no se les proporciona un valor.
Parece que me falta algo. ¿Alguien puede proporcionar algo de claridad sobre si mi último ejemplo es la forma de usar componentes funcionales sin estado con niños en React?
@types