Dado un componente simple que representa a sus hijos:
class ContainerComponent extends Component {
static propTypes = {
children: PropTypes.object.isRequired,
}
render() {
return (
<div>
{this.props.children}
</div>
);
}
}
export default ContainerComponent;
Pregunta: ¿Cuál debería ser el propType del prop de los niños?
Cuando lo configuro como un objeto, falla cuando uso el componente con varios hijos:
<ContainerComponent>
<div>1</div>
<div>2</div>
</ContainerComponent>
Advertencia: No se pudo tipo prop: prop no válido
children
de tipoarray
suministrado paraContainerComponent
, que se esperaobject
.
Si lo configuro como una matriz, fallará si le doy solo un hijo, es decir:
<ContainerComponent>
<div>1</div>
</ContainerComponent>
Advertencia: Tipo de utilería fallido: hijos de utilería no válidos del tipo de objeto suministrado a ContainerComponent, matriz esperada.
Por favor avise, ¿no debería molestarme en hacer una verificación de propTypes para elementos secundarios?
reactjs
jsx
react-proptypes
d3ming
fuente
fuente
node
Respuestas:
Pruebe algo como esto utilizando
oneOfType
oPropTypes.node
o
fuente
children
del tipoobject
... esperaba una matriz."children: PropTypes.node
que funcionó para ambos casos. Gracias por las sugerencias =)React.PropTypes.node
describe cualquier objeto renderizable.PropTypes.node
. Eso maneja la siguiente corrección: nada, cadena, elemento único, varios elementos, fragmento, componente.Para mí depende del componente. Si sabe con qué necesita que se rellene, debe intentar especificar exclusivamente o varios tipos utilizando:
Sin embargo, la mayoría de las veces, con componentes más genéricos que pueden tener muchos tipos de hijos, estoy feliz de usar:
Si desea hacer referencia a un componente Reaccionar, entonces estará buscando
A pesar de que,
describe todo lo que se puede representar: cadenas, números, elementos o una serie de estas cosas. Si esto te conviene, este es el camino.
fuente
Proptypes.any
Es un tipo muy común. Eslint no está contento con eso.La documentación de PropTypes tiene lo siguiente
Por lo tanto, puede usar
PropTypes.node
para buscar objetos o matrices de objetosfuente
Las respuestas aquí no parecen abarcar la verificación exacta de los niños.
node
yobject
son demasiado permisivos, quería verificar el elemento exacto. Esto es lo que terminé usando:oneOfType([])
para permitir niños solos o en conjuntoshape
yarrayOf(shape({}))
para soltero y conjunto de niños, respectivamenteoneOf
para el elemento hijo en síAl final, algo como esto:
Este problema me ayudó a resolver esto más claramente: https://github.com/facebook/react/issues/2979
fuente
Si desea hacer coincidir exactamente un tipo de componente, marque esto
Si desea hacer coincidir exactamente algunos tipos de componentes, marque esto
fuente
Pruebe un propTypes personalizado:
Violín
Mostrar fragmento de código
fuente
Ejemplo:
Imagen: muestra un error en la consola si el tipo esperado es diferente
fuente