递归渲染组件

IT技术 reactjs
2021-05-11 15:23:54

你如何使用 React 渲染递归列表?假设您有一个列表数据,例如

{
    "list": [
        "Parent",
        "subList": [
            {
                "First Child",
                "subList": [
                    {
                        "Grand Child 1-1"
                    },
                    {
                        "Grand Child 1-2"
                    }
                ]
            },
            {
                "Second Child",
                "subList": [
                    {
                        "Grand Child 2-1",
                        "sublist": []
                    }
                ]
            }
        ]
    ]
}

您将如何编写递归映射函数来呈现缩进的子列表?以下是我的尝试,但我想递归地进行。

renderCheckboxRows = (list) => {
    list.map((filter, index) => {

        let content = <FilterRow key={index} {...filter} />;
        let subListContent = [];

        if (filter.subList && filter.subList.length > 0) {
            filter.subList.map((filter, index) => {
                subListContent.push(<FilterRow key={index} {...filter} />);
            });
        }
        return (content + subListContent);
    });

}
1个回答

我通常通过为此目的引入专用组件来做到这一点。

让我们命名吧Node它的用法如下:

<Node caption={root.caption} children={root.children}/>

然后在里面Node.render

render()
{
    var children = [];

    children = this.props.children.map((c) =>
    {
        return <Node caption={c.caption} children={c.children}>
    });

    return (
        <div>
            <div>{this.props.caption}</div>
            {children}
        </div>
    );
}

这只是一个草稿示例,divs您将拥有自己的组件,但它说明了这个想法。