2017-10-06 3 views
0

ma console enregistre ce qui suit quand je commence mon application:Réact - le type de prop (imbriqué) est invalide; il doit être une fonction

Attention: type prop Failed: Accueil: accessoire de type home est invalide; il doit être une fonction

J'ai regardé en ligne, mais ne l'ai pas vu de cas ou des exemples d'un accessoire de type imbriqué de retour cette erreur si je suis mal à corriger l'avertissement, voici mon code:

Home.propTypes = { 
    home: { 
    readyStatus: PropTypes.string, 
    list: PropTypes.arrayOf(PropTypes.object), 
    }, 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home:() => {}, 
    readyStatus: '', 
    fetchUsersIfNeeded:() => {}, 
}; 

Toute aide ou conseil est apprécié - merci d'avance!

+0

Aussi vous je pense que vous ne devriez pas utiliser defaultProps et requis côte à côte – aks

+0

@aks whoops c'était une erreur que j'ai faite pendant le test, retiré de Q –

Répondre

1

Je pense que le problème est dans les façon dont les choses sont écrites

Home.propTypes = { 
    home: PropTypes.shape({ 
    readyStatus: PropTypes.string, 
    list: PropTypes.arrayOf(PropTypes.object).isRequired, 
    }), 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home: { 
    list: [], 
    readyStatus: '', 
    }, 
    fetchUsersIfNeeded:() => {}, 
}; 

Cette première solution permet à la fois le même type comme un objet et cela devrait fonctionner. L'autre option pourrait être:

Home.propTypes = { 
    home: PropTypes.func, 
    fetchUsersIfNeeded: PropTypes.func, 
}; 

Home.defaultProps = { 
    home:() => {}, 
    fetchUsersIfNeeded:() => {}, 
}; 

Ici, nous faisons le type de prop comme une fonction de sorte que le type à la fois l'instance correspond. Un conseil rapide si la maison est un objet qui est un état alors il devrait être un objet comme la solution 1 ou si la maison est une valeur calculée qui est dérivée d'autres états ou appel réseau ou quoi que ce soit alors vous devriez utiliser le fonction.

Vous pouvez également consulter flow.org si vous voulez mieux vérifier les fonctions.

Remarque, je n'ai pas testé ce code mais cela devrait résoudre le problème.

+0

merci, mais pourquoi est le premier vérificateur nommé 'nowHome' –

+0

+ dans le premier exemple, ne devrait pas readyStatus être imbriqué dans la maison? –

+0

Juste fait ces erreurs de frappe stupides. Passer à la caisse. – aks