2017-12-17 7 views
0

私はマッピングしているオブジェクトの配列を持っていて、id(<AttachedComment />)と一致する場合はコンポーネントを返します。この設定は、以下のコードではうまくいきますが、地図作成後の結果を最初の3項目に限定したいと思います。 pre-map slicingは、IDマッチングの前に配列の量を制限しているため、適切なアプローチではありません。ポストマップされた配列をスライスする良い方法はありますか?地図の後の結果を制限する

オリジナル配列マップ:

{ this.props.comments.map((comment, i) => 
        <AttachedComment key={comment.recordCommentId} deleteCommentFunc={this.props.deleteCommentFunc} commentObj={comment} recordComponentId={this.props.recordId} userId={this.props.user} csrf={this.props.csrf}/> 
        )} 

AttachedComment

const AttachedComment = props => { 
    if(props.commentObj.recordIdHash == props.recordComponentId){ 
     return (
      <Comment {...props.commentObj} deleteCommentFunc={props.deleteCommentFunc} key={props.commentObj.recordCommentId} currentUserId={props.userId} csrf={props.csrf}/> 
      ) 
    } else { 
     return null; 
    } 
} 

答えて

1

renderメソッドの開始時に最初にしたいコメントをフィルタリングし、新しい配列に割り当てます。次に、マップ操作の前に結果を下に示すようにスライスします。

注:あなたがアプローチの下に提案し、答えを

render() { 
    const filteredList = this.props.comments.filter((comment) => comment.recordIdHash === this.props.recordId); 

    return (
     <div> 
      {filteredList.slice(0, 3).map((comment, i) => 
       <AttachedComment key={comment.recordCommentId} deleteCommentFunc={this.props.deleteCommentFunc} 
           commentObj={comment} recordComponentId={this.props.recordId} 
           userId={this.props.user} csrf={this.props.csrf}/> 
      )} 
     </div> 
    ); 
} 
+0

感謝を使用している場合AttachedComment部品であれば条件は必要ありません。あなたは、あなたが 'AttachedComment'を使う必要がないという答えは、' filteredList'マップでそれを参照する理由があると言いますから? 'AttachedComment'によって返された' Comment'コンポーネントであってはなりませんか? – cphill

+0

あなたは 'AttachedComment'コンポーネント内に他のロジックがあると思います。そうでない場合、あなたはそれを必要としません。 'Comment'コンポーネントを直接使用することができます。 –

0
 let counter; 
     const AttachedComment = props => { 
     if(props.commentObj.recordIdHash == props.recordComponentId && counter < 4){ 
      return (
       counter++ 
       <Comment {...props.commentObj} deleteCommentFunc={props.deleteCommentFunc} key={props.commentObj.recordCommentId} currentUserId={props.userId} csrf={props.csrf}/> 

       ) 
     } else { 
      return counter = 0; 
     } 
    }