How Do I Fix "expected To Return A Value At The End Of Arrow Function" Warning?
Solution 1:
A map()
creates an array, so a return
is expected for all code paths (if/elses).
If you don't want an array or to return data, use forEach
instead.
Solution 2:
The warning indicates that you're not returning something at the end of your map arrow function in every case.
A better approach to what you're trying to accomplish is first using a .filter
and then a .map
, like this:
this.props.comments
.filter(commentReply => commentReply.replyTo === comment.id)
.map((commentReply, idx) =><CommentItemkey={idx}className="SubComment"/>);
Solution 3:
The easiest way only if you don't need return something it'ts just return null
Solution 4:
The problem seems to be that you are not returning something in the event that your first if
-case is false.
The error you are getting states that your arrow function (comment) => {
doesn't have a return statement. While it does for when your if
-case is true, it does not return anything for when it's false.
returnthis.props.comments.map((comment) => {
if (comment.hasComments === true) {
return (
<divkey={comment.id}><CommentItemclassName="MainComment" />
{this.props.comments.map(commentReply => {
if (commentReply.replyTo === comment.id) {
return (
<CommentItemclassName="SubComment"/>
)
}
})
}
</div>
)
} else {
//return something here.
}
});
edit you should take a look at Kris' answer for how to better implement what you are trying to do.
Solution 5:
The most upvoted answer, from Kris Selbekk, it is totally right. It is important to highlight though that it takes a functional approach, you will be looping through the this.props.comments
array twice, the second time(looping) it will most probable skip a few elements that where filtered, but in case no comment
was filtered you will loop through the whole array twice. If performance is not a concern in you project that is totally fine. In case performance is important a guard clause
would be more appropriated as you would loop the array only once:
returnthis.props.comments.map((comment) => {
if (!comment.hasComments) returnnull;
return (
<div key={comment.id}>
<CommentItem className="MainComment"/>
{this.props.comments.map(commentReply => {
if (commentReply.replyTo !== comment.id) returnnull;
return <CommentItem className="SubComment"/>
})}
</div>
)
}
The main reason I'm pointing this out is because as a Junior Developer I did a lot of those mistakes(like looping the same array multiple times), so I thought i was worth mention it here.
PS: I would refactor your react component even more, as I'm not in favour of heavy logic in the html part
of a JSX
, but that is out of the topic of this question.
Post a Comment for "How Do I Fix "expected To Return A Value At The End Of Arrow Function" Warning?"