Prévu pour renvoyer une valeur à la fin de la flèche en fonction de
Tout fonctionne bien, mais j'ai cet avertissement Expected to return a value at the end of arrow function array-callback-return
, j'essaie d'utiliser forEach
au lieu map
, mais alors <CommentItem />
ne s'affiche même pas. Comment résoudre ce problème?
JS:
return this.props.comments.map((comment) => {
if (comment.hasComments === true) {
return (
<div key={comment.id}>
<CommentItem className="MainComment"/>
{this.props.comments.map(commentReply => {
if (commentReply.replyTo === comment.id) {
return (
<CommentItem className="SubComment"/>
) //returnt
} //if-statement
}) //map-function
} //map-function __begin
</div> // comment.id
) //return
- Est-il un autre retour si vous n'entrez pas dans le si?
- Vous retourner uniquement si
commentReply.replyTo === comment.id
. Si ce n'est pas le cas, vous n'avez rien retourner. Vient de mettrereturn null
après laif
bloc - Mikael Lennholm, pourrais-je dire, vous êtes des génies
- certains langages ne permettent pas une seule branche
if
déclarations parce qu'elles conduisent à des problèmes de ce genre. Vous feriez-vous une faveur si vous avez toujours, toujours écrire leelse
branche deif
de l'instructionif
représente une fourchette dans votre code, vous devez indiquer au programme de ce qui se passe sur chaque chemin, pas seulement un.
Vous devez vous connecter pour publier un commentaire.
Le message d'avertissement indique que vous n'êtes pas retourner quelque chose à la fin de votre carte de la flèche en fonction de chaque cas.
Une meilleure approche de ce que vous essayez d'accomplir, c'est d'abord à l'aide d'un
.filter
et puis un.map
, comme ceci:.map
, qui à son tour va être un no-op. En d'autres termes - si il n'y a pas de match, rien ne sera rendu.Un
map()
crée un tableau, unreturn
est prévu pour tous les chemins de code (si/elses).Si vous ne voulez pas d'un tableau ou de renvoyer des données, l'utilisation
forEach
à la place.Le problème semble être que vous n'êtes pas retourner quelque chose dans le cas où votre premier
if
cas est faux.L'erreur que vous obtenez des états que les flèches de votre fonction
(comment) => {
n'ont pas d'instruction return. Alors qu'il ne l'est pour quand votreif
-cas est vrai, il ne retourne rien quand c'est faux.modifier vous devriez jeter un oeil à Kris' a la réponse à comment mieux mettre en œuvre ce que vous essayez de faire.
Les plus upvoted réponse, de Kris Selbekk, il est totalement à droite. Il est important de souligner cependant qu'il faut une approche fonctionnelle, vous serez en boucle par le
this.props.comments
tableau à deux reprises, la seconde fois(en boucle), il sera plus probable sauter quelques éléments où filtré, mais dans le cas où aucunecomment
a été filtré, vous aurez la boucle à travers l'ensemble du tableau à deux reprises. Si la performance n'est pas une préoccupation dans votre projet qui est tout à fait bien. Dans le cas où la performance est importante unguard clause
serait plus approprié comme vous le feriez en boucle le tableau qu'une seule fois:La principale raison pour laquelle je suis pointant c'est parce qu'en tant que Développeur Junior j'ai fait beaucoup de ces erreurs(comme en boucle le même tableau plusieurs fois), j'ai donc pensé que je valait la peine de le mentionner ici.
PS: je refactoriser vos réagir composante encore plus, comme je ne suis pas en faveur de la lourd dans la logique
html part
d'unJSX
, mais qui est hors du sujet de cette question.JS: