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

React递归渲染树形节点异常,求正确实现方案

React递归渲染树形节点的正确实现方式

问题根源

你的代码中,treeRender函数的for循环里每次迭代都直接return,导致循环只执行一次就终止,仅处理了第一个键值对(__global),后续的节点(比如group1)完全没有被遍历到,所以只能渲染出部分结构。

修正后的代码

const treeRender = (data: any) => {
  const nodes = [];
  for (const [name, value] of Object.entries(data)) {
    // 排除null,避免将null误判为文件夹
    if (typeof value === "object" && value !== null) {
      nodes.push(
        <StyledTreeItem
          key={name}
          nodeId={name}
          labelText={name}
          labelIcon={FolderIcon}
        >
          {treeRender(value)}
        </StyledTreeItem>
      );
    } else {
      nodes.push(
        <StyledTreeItem
          key={name}
          nodeId={name}
          labelText={name}
          labelIcon={InsertDriveFileIcon}
        />
      );
    }
  }
  return nodes;
};

return (
  <TreeView
    aria-label="filePicker"
    defaultExpanded={["3"]}
    defaultCollapseIcon={<ArrowDropDownIcon />}
    defaultExpandIcon={<ArrowRightIcon />}
    defaultEndIcon={<div style={{ width: 24 }} />}
    sx={{ height: 264, flexGrow: 1, maxWidth: 400, overflowY: "auto" }}
  >
    {treeRender(fileTree)}
  </TreeView>
);

关键修改说明

  1. 用数组nodes收集所有遍历生成的JSX节点,不再在循环内直接return,确保所有键值对都被处理。
  2. 增加value !== null的判断,因为typeof null的结果是"object",避免将null错误渲染为文件夹。
  3. 遍历完成后返回整个节点数组,React会自动渲染数组中的每一个元素,完整展示树形结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:50:28