在此代码中,Return声明根据当前迭代对象的第一个元素属性创建一个HTML元素.数组中的每个对象都可以拥有一个子array.如果存在这样的数组,则应该将这些子数组作为HTML元素附加到同一对象中的元素.如果它没有子数组,则应该简单地将它们附加为单个元素.子数组中的每个元素都可能包含另一组子元素.这个循环无限地持续.

我try 创建一个函数,该函数通过循环调用自己来对子元素们执行相同的任务.然而,子HTML元素不会附加到其父元素.我无法在我的代码中指出问题,我需要您的帮助.

EXAMPLE ARRAY:如您所见,索引0有一个子数组,我们需要映射这些数组并将其作为子数组附加到其父元素(即数组[0].Element).该子数组的每个元素也有子数组,因此我们需要将所有这些元素作为子元素再次附加到其父元素,以此类推.第二个元素没有子数组,因此只需创建一个单独的元素即可.

export const array = [
    {
        element: 'div',
        children: [
            {
                element: 'div',
                children: [
                    {
                        element: 'div',
                    },
                    {
                        element: 'div',
                    },
                    {
                        element: 'div',
                    }
                ]
            },
            {
                element: 'div',
                children: [
                    {
                        element: 'div',
                        children: [
                            {
                                element: 'div'
                            },
                            {
                                element: 'div'
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        element: 'div'
    }
]

FUNCTION:

const renderChildren = (children) => {
    if (!children || children.length === 0) {
        return null;
    };

    return children.map((child, index) => {
        if (child.children && child.children.length > 0) {
            return (
                <child.element key={index}>
                    {renderChildren(child.children)}
                </child.element>
            );
        } else {
            return <child.element key={index} />;
        }
    });
};

RETURN:

return (
    array.map((e, i) => {
        return (
            <e.element key={i}>
                {renderChildren(e.element.children)}
            </e.element>
        );
    })
);

推荐答案

您正在renderChildren中传递未定义的值它应该是e.children而不是e.element.children

return (
    array.map((e, i) => {
        return (
            <e.element key={i}>
                {renderChildren(e.children)}
            </e.element>
        );
    })
);

Javascript相关问答推荐

从连接字符串创建客户端时,NodeJS连接到CosmosDB失败

主要内部的ExtJS多个子应用程序

ReactJS中的material UI自动完成类别

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

从实时数据库(Firebase)上的子类别读取数据

传递一个大对象以在Express布局中呈现

如何迭代叔父元素的子HTML元素

如何修复我的数据表,以使stateSave正常工作?

Web Crypto API解密失败,RSA-OAEP

查询参数未在我的Next.js应用路由接口中定义

向数组中的对象添加键而不改变原始变量

当代码另有说明时,随机放置的圆圈有时会从画布上消失

为什么在函数中添加粒子的速率大于删除粒子的速率?

无法读取未定义的属性(正在读取合并)-react RTK

将多个文本框中的输出合并到一个文本框中

在GraphQL解析器中修改上下文值

使用API调用的VUE 3键盘输入同步问题

与在编剧中具有动态价值的定位器交互

Plotly.js栏为x轴栏添加辅助文本

AstroJS混合模式服务器终结点返回404