ant design Comment组件使用递归问题

发布于 2022-09-13 00:43:09 字数 1383 浏览 15 评论 0

目标:我想展示多级评论
环境:react+ts
问题:我现在写了下面的一个递归函数,但是报错"Maximum call stack size exceeded"

const createTree = (comment: TC, children?: any) => {
    if (comment.children) {
        comment.children.forEach((item: TC) => {
            createTree(comment, createTree(item));
        });
        return <Comment
            content={comment.content}
            datetime={comment.date}>
            {children}
        </Comment>
    } else {
        return <Comment
            content={comment.content}
            datetime={comment.date}>
            {children}
        </Comment>
    }
};

数据是这样的:

[
    {
        "id": 210709333,
        "topic_id": 6,
        "topic_type": "Javascript",
        "content": "promise",
        "from_uid": 2,
        "to_uid": null,
        "date": "2021-07-08T16:00:00.000Z",
        children: [{
            "id": 210709334,
            "topic_id": 6,
            "topic_type": "Javascript",
            "content": "promise3",
            "from_uid": 3,
            "to_uid": 2,
            "date": "2021-07-08T16:00:00.000Z"
        }]
    },
    {
        "id": 210709335,
        "topic_id": 6,
        "topic_type": "Javascript",
        "content": "promise4",
        "from_uid": 3,
        "to_uid": null,
        "date": "2021-07-08T16:00:00.000Z"
    }
];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

遥远的绿洲 2022-09-20 00:43:09

页面渲染得用有返回值的数组方法。比如map来渲染。

代码如下

const data = [
            {
                id: 210709333,
                topic_id: 6,
                topic_type: 'Javascript',
                content: 'promise',
                from_uid: 2,
                to_uid: '',
                date: '2021-07-08T16:00:00.000Z',
                children: [
                    {
                        id: 210709334,
                        topic_id: 6,
                        topic_type: 'Javascript',
                        content: 'promise3',
                        from_uid: 3,
                        to_uid: 2,
                        date: '2021-07-08T16:00:00.000Z'
                    }
                ]
            },
            {
                id: 210709335,
                topic_id: 6,
                topic_type: 'Javascript',
                content: 'promise4',
                from_uid: 3,
                to_uid: '',
                date: '2021-07-08T16:00:00.000Z'
            }
        ];
function loadComments(data: any): React.ReactNode {
            return data.map((item: any) => {
                return <div>{item.content} <div className="m-l-5">{item.children && item.children.length && loadComments(item.children)}</div></div>;
            });
        }

页面上直接这样就好

{loadComments(data)}

渲染效果

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文