2017-07-10 25 views
9

सब कुछ ठीक काम करता है, लेकिन मेरे पास यह चेतावनी Expected to return a value at the end of arrow function array-callback-return है, मैं forEach के बजाय का उपयोग करने का प्रयास करता हूं, लेकिन फिर <CommentItem /> भी प्रदर्शित नहीं होता है। इसे कैसे ठीक करें?तीर फ़ंक्शन

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

+0

अगर आप इसमें शामिल नहीं हैं तो कोई और वापसी है? – epascarello

+2

आप केवल 'commentReply.replyTo === comment.id' पर वापस आते हैं। यदि ऐसा नहीं है, तो आप कुछ भी वापस नहीं करते हैं। 'If' ब्लॉक –

+0

माइकल लेनोहोम के बाद बस 'वापसी शून्य' डालें, क्या मैं कह सकता हूं, आप प्रतिभा –

उत्तर

15

चेतावनी संकेत देता है कि आप हर मामले में अपने नक्शे तीर समारोह के अंत में कुछ नहीं लौटा रही हैं।

क्या आप, पूरा करने के लिए पहली बार एक .filter और फिर एक .map उपयोग कर रहा है कोशिश कर रहे हैं इस तरह के एक बेहतर दृष्टिकोण:

this.props.comments 
    .filter(commentReply => commentReply.replyTo === comment.id) 
    .map((commentReply, idx) => <CommentItem key={idx} className="SubComment"/>); 
2

समस्या हो कि आप घटना में कुछ वापस नहीं कर रहे हैं लगता है कि आपका पहला if -केस गलत है।

आपको जो त्रुटि मिल रही है वह बताती है कि आपका तीर फ़ंक्शन (comment) => { में कोई वापसी विवरण नहीं है। हालांकि यह आपके if -केस के लिए करता है, यह गलत होने पर कुछ भी वापस नहीं करता है।

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"/> 
      ) 
      } 
     }) 
     } 
     </div> 
    ) 
    } else { 
    //return something here. 
    } 
}); 

संपादित आप कैसे बेहतर लागू करने के लिए आपको बस इतना करना कोशिश कर रहे हैं के लिए क्रिस 'जवाब पर एक नज़र रखना चाहिए।

1

map() एक सरणी बनाता है, इसलिए return सभी कोड पथ (यदि/elses) के लिए अपेक्षित है।

यदि आप कोई सरणी नहीं चाहते हैं या डेटा वापस नहीं करना चाहते हैं, तो इसके बजाय forEach का उपयोग करें।

संबंधित मुद्दे