React: React.PropTypes.node deve aceitar componente sem estado (função)

Criado em 22 nov. 2015  ·  3Comentários  ·  Fonte: facebook/react

Acabei de substituir alguns componentes react que foram definidos usando classes es6 e agora estou recebendo avisos sobre meu componente react stateless (que são apenas funções) não sendo um ReactNode.

Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.

Eu estava validando alguns componentes usando React.PropTypes.node , mas agora preciso usar PropTypes.oneOfType([ PropTypes.node, PropTypes.func ]) que parece um pouco longo para dizer "isso pode ser qualquer coisa que possa ser renderizada como um componente" (que é o que ProTypes.node deve cobrir certo?).

Do documento

    // Anything that can be rendered: numbers, strings, elements or an array
    // (or fragment) containing these types.
    optionalNode: React.PropTypes.node,

Talvez func deva ser adicionado? Ou há alguma razão pela qual node não lida com func também?

Comentários muito úteis

Você pode mostrar como você estava usando isso? Eu também não acho que as Classes de Componentes deveriam ser válidas para node . node deve aceitar qualquer coisa que possa ser renderizada. As classes não podem ser renderizadas diretamente - você passaria um elemento com o tipo definido.

Todos 3 comentários

Que tal adicionar um novo validador propType? Algo como

propTypes: {
    optionalComponent: React.PropTypes.component
}

onde o componente teria forma de

PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])

ou algo semelhante. Na minha opinião é muito perigoso deixar as pessoas passarem funções, mas não tenho certeza de como fazer uma validação melhor. Ler function.toString parece um hack gigantesco que não funcionaria após a minificação, mas esta é a única opção que conheço.

Você pode mostrar como você estava usando isso? Eu também não acho que as Classes de Componentes deveriam ser válidas para node . node deve aceitar qualquer coisa que possa ser renderizada. As classes não podem ser renderizadas diretamente - você passaria um elemento com o tipo definido.

Oh meu Deus. Você está tão certo. Eu me sinto estúpido. Acho que estava validando algo do jeito ruim. Desculpe o barulho.

Esta página foi útil?
0 / 5 - 0 avaliações