들어가기 전에 React 댓글 추가 글에서는 컴포넌트를 분리하지 않고 Feed.js에서 댓글을 추가하였는데 이 뒤에 컴포넌트를 분리하는 것이 관리하기 편해질 것 같아 CommentList와 Comment 컴포넌트로 분리하였다.
<ul className="comment__ul">
<CommentList
comments={this.state.comments}
deleteComment={this.deleteComment}
/>
</ul>
class CommentList extends React.Component {
render() {
return this.props.comments.map((content) => {
return (
<Comment
key={content.id}
comments={content}
commentsArr={this.props.comments}
deleteComment={this.props.deleteComment}
/>
);
});
}
}
class Comment extends React.Component {
render() {
return (
<li className="comment">
<div className="comment__div">
<span className="nickname">{this.props.comments.nickname}</span>
<p>{this.props.comments.comment}</p>
<button className="more">{this.props.comments.btn}</button>
</div>
<div className="like-delete">
<button className="mini-like-btn">
<img alt="Heart" className="mini-heart" src="images/heart.png" />
</button>
<button
className="delete-btn"
onClick={() => this.props.deleteComment(this.props.comments.id)}
>
X
</button>
</div>
</li>
);
}
}
- 해당 댓글의 id를 인자로 받아온다
- 인자로 받아온 id와 state에 댓글을 모아놓은 배열인 comments 안의 id 값이 일치하지 않는값만 filter해서 새로운 배열을 setState한다.
<button
className="delete-btn"
onClick={() => this.props.deleteComment(this.props.comments.id)}
>
X
</button>
deleteComment = (id) => {
this.setState({
comments: this.state.comments.filter((content) => content.id !== id),
});
};