У меня есть следующий компонент для отображения набора комментариев (и их ответов). Если комментарий имеет непустой массив childPosts
, то компонент снова вызывается с идентификаторами childPosts. Все комментарии доступны из магазина редуксов через props.discussionPosts
.
import * as React from 'react';
import { useState } from 'react';
import { connect } from 'react-redux';
const CommentItem = (props) => {
return (
<div>
{
props.commentIds && props.discussionPosts &&
props.commentIds.map(commentId => {
console.log(props.discussionPosts[commentId].childPosts)
var ident = 10;
return (
<div key={commentId} className="comment">
<div>{props.discussionPosts[commentId].content}</div>
{
props.discussionPosts[commentId].childPosts.length > 0 &&
<div style={{ marginLeft: '10px'}}>
<CommentItem
key={commentId}
commentIds={props.discussionPosts[commentId].childPosts}
/>
</div>
}
</div>
)
})
}
</div>
)
}
const mapStateToProps = (state) => ({
discussionPosts: state.alignPerspectivesReducer.discussionPosts,
error: state.alignPerspectivesReducer.error,
loading: state.alignPerspectivesReducer.loading
})
export default connect(mapStateToProps)(CommentItem);
Я размещаю этот компонент на главной странице со следующим кодом, где commentIds
устанавливается для идентификаторов комментариев без родительского комментария.
<CommentItem
commentIds={props.discussionPosts.filter(function (x) {
return props.discussionPosts[x].parentPostId === null;
})}
/>
Однако код отображает только комментарии верхнего уровня без родительского комментария:
Comment 1
Comment 2
Чего я хочу добиться, это:
Comment 1
Reply to c#1
Comment 2
Reply to c#2
Но по какой-то причине следующий код внутри компонента CommentItem
не производит их:
<CommentItem
key={commentId}
commentIds={props.discussionPosts[commentId].childPosts}
/>
Я могу правильно печатать значения childPosts
в консоли. Ниже на рисунке вы можете увидеть, как выглядят данные discussionPosts
:

Я не получаю никакой ошибки, но этот рекурсивный компонент не работает должным образом. Любая помощь?