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

JSX中递归遍历n层树形嵌套JSON渲染节点的实现问题

问题原因

现有代码无法渲染子层级,是三个逻辑错误导致的:

  • 递归遍历gates的代码写在了return语句之后,只要传入的plotObject不为空,函数会直接返回当前层级的population div,后续遍历逻辑永远不会执行
  • 递归调用时写错了函数名:遍历gates节点时写的是plotObject(gate.plot),实际需要调用renderPlots函数本身,且遍历生成的子节点没有被return到JSX结构中
  • 缺少空值兜底:如果某个plot节点没有gates字段,直接调用.map会触发JS报错
修正方案

递归渲染树形结构的核心逻辑是:先渲染当前节点内容,再遍历所有子节点,对每个子节点重复执行渲染逻辑,最终把所有层级的节点拼接为完整的JSX结构返回。
修正后的完整代码如下:

function Plot(props) {

  const renderPlots = (plotObject) => {
    // 空节点直接返回,不渲染
    if (!plotObject) return null;

    return (
      <>
        {/* 渲染当前节点的population字段 */}
        <div>{plotObject.population}</div>
        {/* 遍历所有子gate节点,递归渲染嵌套的plot */}
        {plotObject.gates?.map((gate, gateIndex) => (
          // 加左内边距体现层级关系,不需要可删除
          <div key={gateIndex} style={{ paddingLeft: '24px' }}>
            {renderPlots(gate.plot)}
          </div>
        ))}
      </>
    );
  };

  return (
    <div style={{ height: "200px" }}>
      Render Plots:
      {/* 注意顶层数据结构,传入最外层的plot节点 */}
      {renderPlots(MultiStainState.plot)}
    </div>
  );
}

代码说明:

  • 用可选链?.访问gates字段,兼容没有子节点的叶子plot,不会触发map类型错误
  • 循环渲染时添加了key属性,符合React渲染规范
  • 子层级增加了左内边距,渲染后可直观看出树形嵌套关系,不需要可删除对应样式
  • 调用renderPlots时传入MultiStainState.plot,匹配给出的顶层数据结构,避免拿不到population字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:45:32