Dado um componente simples que gera seus filhos:
class ContainerComponent extends Component {
static propTypes = {
children: PropTypes.object.isRequired,
}
render() {
return (
<div>
{this.props.children}
</div>
);
}
}
export default ContainerComponent;
Pergunta: Qual deve ser o propType das crianças prop?
Quando eu o defino como objeto, ele falha quando uso o componente com vários filhos:
<ContainerComponent>
<div>1</div>
<div>2</div>
</ContainerComponent>
Aviso: Tipo de suporte com falha: suporte inválido
children
do tipoarray
fornecido paraContainerComponent
, esperadoobject
.
Se eu defini-lo como uma matriz, ele falhará se eu der apenas um filho, ou seja:
<ContainerComponent>
<div>1</div>
</ContainerComponent>
Aviso: Tipo de suporte com falha: filhos de objetos inválidos do objeto de tipo fornecidos ao ContainerComponent, matriz esperada.
Por favor, informe, eu não deveria me incomodar em fazer uma verificação de propTypes para elementos child?
reactjs
jsx
react-proptypes
d3ming
fonte
fonte
node
Respostas:
Tente algo assim utilizando
oneOfType
ouPropTypes.node
ou
fonte
children
do tipoobject
... espera um array."children: PropTypes.node
que funcionou para os dois casos. Obrigado pelas sugestões =)React.PropTypes.node
descreve qualquer objeto renderizável.PropTypes.node
. Isso lida com a seguinte correção: nada, sequência, elemento único, vários elementos, fragmento, componente.Para mim, depende do componente. Se você sabe com o que precisa ser preenchido, tente especificar exclusivamente ou vários tipos usando:
No entanto, na maioria das vezes, acho que, com componentes mais genéricos que podem ter muitos tipos de filhos, fico feliz em usar:
Se você quiser se referir a um componente React, estará procurando
Apesar,
descreve qualquer coisa que possa ser renderizada - strings, números, elementos ou uma matriz dessas coisas. Se isso combina com você, então este é o caminho.
fonte
Proptypes.any
é um tipo muito comum. Eslint não está feliz com isso.A documentação do PropTypes possui os seguintes
Então, você pode usar
PropTypes.node
para verificar se há objetos ou matrizes de objetosfonte
As respostas aqui não parecem abranger a verificação exata das crianças.
node
eobject
são muito permissivos, eu queria verificar o elemento exato. Aqui está o que eu acabei usando:oneOfType([])
para permitir um único ou vários filhosshape
earrayOf(shape({}))
para um e vários filhos, respectivamenteoneOf
para o próprio elemento filhoNo final, algo parecido com isto:
Esse problema me ajudou a descobrir isso com mais clareza: https://github.com/facebook/react/issues/2979
fonte
Se você deseja corresponder exatamente a um tipo de componente, verifique este
Se você deseja corresponder exatamente a alguns tipos de componentes, verifique este
fonte
Experimente um suporte personalizado
Violino
Mostrar snippet de código
fonte
Exemplo:
Imagem: mostra um erro no console se o tipo esperado for diferente
fonte