You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中实现支持任意层级嵌套子点的递归组件

实现任意层级嵌套的要点组件方案

1. 调整TypeScript类型定义

首先把原来的扁平结构改成递归类型,支持任意层级的子节点:

// 递归的节点类型,每个节点包含内容和可选的子节点数组
interface Point {
  content: string;
  children?: Point[];
}

// 组件入参类型
interface PointCardProps {
  pointData: Point[];
}

将原来的mainPoint统一为通用字段content,subPoint替换为可选的children数组,数组项仍为Point类型,即可支持无限层级嵌套。

2. 实现递归渲染逻辑

抽离单独的递归子组件渲染每一级节点,外层保留原有的有序列表包裹主节点:

import React from 'react';

interface Point {
  content: string;
  children?: Point[];
}

interface PointCardProps {
  pointData: Point[];
}

// 递归渲染子节点的组件
const PointItem: React.FC<{ point: Point }> = ({ point }) => {
  return (
    <li>
      {point.content}
      {/* 存在子节点时递归渲染下一级无序列表 */}
      {point.children?.length ? (
        <ul>
          {point.children.map((child, index) => (
            <PointItem key={index} point={child} />
          ))}
        </ul>
      ) : null}
    </li>
  );
};

export const MultiNest = (props: PointCardProps) => {
  return (
    <ol>
      {props.pointData.map((mainPoint, index) => (
        <PointItem key={index} point={mainPoint} />
      ))}
    </ol>
  );
};

3. 使用示例

对应你给出的嵌套效果,组件入参写法如下:

const demoData: Point[] = [
  {
    content: "main point 1",
    children: [
      { content: "sub point 1" },
      {
        content: "sub point 2",
        children: [
          {
            content: "sub point 2.1",
            children: [
              {
                content: "sub point 2.2",
                children: [
                  { content: "sub point 2.2.1" }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  {
    content: "main point 2",
    children: [
      { content: "subpoint 1" }
    ]
  }
];

// 调用组件
<MultiNest pointData={demoData} />

渲染后的DOM结构完全符合需求,理论上支持无限层级的子节点嵌套。

内容的提问来源于stack exchange,提问作者anoop francis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:54:04