Answer the question
In order to leave comments, you need to log in
How to display nested comments in React?
The task is to display comments on the page. The following JSON comes from the server:
"comments": [
{
"id": 92241,
"text": "Поздравляю и желанию дальнейшего процветания. Успехов и всего самого наилучшего. Ваша новость еще раз свидетельство того, что все под силу изменить, если нас много и мы едины.",
"edit_link": "http://localhost:8006/admin/comments/comment/92241/change/",
"level": 0,
"allow_reply": true,
"replies": []
},
{
"id": 92241,
"text": "Поздравляю и желанию дальнейшего процветания. Успехов и всего самого наилучшего. Ваша новость еще раз свидетельство того, что все под силу изменить, если нас много и мы едины.",
"edit_link": "http://localhost:8006/admin/comments/comment/92241/change/",
"level": 0,
"allow_reply": true,
"replies": [
{
"id": 92241,
"text": "Поздравляю и желанию дальнейшего процветания. Успехов и всего самого наилучшего. Ваша новость еще раз свидетельство того, что все под силу изменить, если нас много и мы едины.",
"edit_link": "http://localhost:8006/admin/comments/comment/92241/change/",
"level": 0,
"allow_reply": true,
"replies": []
},
{
"id": 92241,
"text": "Поздравляю и желанию дальнейшего процветания. Успехов и всего самого наилучшего. Ваша новость еще раз свидетельство того, что все под силу изменить, если нас много и мы едины.",
"edit_link": "http://localhost:8006/admin/comments/comment/92241/change/",
"level": 0,
"allow_reply": true,
"replies": [
{
"id": 92241,
"text": "Поздравляю и желанию дальнейшего процветания. Успехов и всего самого наилучшего. Ваша новость еще раз свидетельство того, что все под силу изменить, если нас много и мы едины.",
"edit_link": "http://localhost:8006/admin/comments/comment/92241/change/",
"level": 0,
"allow_reply": true,
"replies": []
}
]
}
]
}
]
{this.props.comments.map((item, id) => {
return (
<div className="talk-branch">
<Comment {...item} />
</div>
)
})}
var Comment = class Comment extends React.Component {
render() {
const { fullname, date, text, replies } = this.props;
return (<div className="talk-branch__item">
<div className="talk-branch-main">
<div className="talk-branch__avatar">
<img src="https://www.fursk.ru/static/img/talk/woman_avatar.png" alt="avatar"/>
</div>
<div className="talk-branch__body">
<div className="talk-branch__body-author" itemType="http://schema.org/Person" itemProp="author">
<span className="talk-branch__body-name" itemProp="name">{fullname}</span>
</div>
<div className="talk-branch__date">
<time itemProp="datePublished" datetime={date}>
{date}
</time>
</div>
<div className="talk-branch__text" itemProp="reviewBody">
{text}
</div>
<div className="talk-branch__reply">
<div onClick={this.toggleForm}>Ответить</div>
</div>
</div>
</div>
{replies && replies.length !== 0 ?
replies.map((item, id) => {
return <Comment {...item} />
})
:
false}
</div>)
}
}
export default Comment;
Answer the question
In order to leave comments, you need to log in
You don't pass a comment in a component when you call yourself. It would also be nice to make sure that Comment is called only if there are comments. And in a comment, you call Comment once, not a list of comments.
I would do so. I created the CommentList component, in it I made a call to the current Comment comments in a loop. And in the Comment component, I checked for the presence of comments, if there are any, I would call CommentList (passing it a list of comments), which in due time will again cycle through the comments and call the Comment component, etc.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question