react-simple-tree-menu获取数据时map无法访问子标签如何修复
问题根因
子节点无法正常渲染是3处代码逻辑错误导致的:
- 内层
e.childTags.map回调无有效返回值:你写的nodes:[...]属于无效的语法片段,既没有声明变量,也没有作为返回值返回,map执行后会得到全是undefined的数组,组件拿不到子节点配置。 - 子节点字段名不符合组件要求:
react-simple-tree-menu约定节点的嵌套子节点必须放在nodes字段下,你当前把子节点数组赋值给了child字段,组件无法识别嵌套结构。 - 渲染逻辑冗余:外层遍历所有父标签时,每个父标签都单独渲染了一个
TreeMenu实例,不仅会造成性能浪费,还会导致不同树的展开、点击状态互相独立,不符合树形组件的交互预期。
修复后可直接运行的代码
<div style={{ listStyleType: "none", display: "inline" }}> <TreeMenu cacheSearch debounceTime={125} disableKeyboard={false} hasSearch={false} onClickItem={onClickPlusButton} resetOpenNodesOnDataUpdate={false} // 仅渲染一个TreeMenu实例,统一传入格式化后的全量树数据 data={state.tagData.allTagDetails.map((parentTag: any) => ({ key: parentTag.id, label: parentTag.name, // 严格使用组件要求的nodes字段挂载子节点 nodes: parentTag.childTags.map((childTag: any) => ({ key: childTag.id, label: childTag.name // 如果子标签还有下一级,在这里继续加nodes字段嵌套即可 })) }))} /> </div>
关键修复点说明
- 修正map遍历的返回逻辑:所有
map回调都显式返回格式化后的节点对象,删除无效的语法片段,保证遍历后得到结构正确的节点数组。 - 对齐组件的字段约定:将挂载子节点的字段从错误的
child改为组件要求的nodes,让组件可以正常解析嵌套的树形结构。 - 优化组件渲染逻辑:移除外层循环生成多
TreeMenu实例的写法,只保留一个树组件实例,将所有层级的节点格式化后统一传入data属性,保证树的交互状态统一。
内容的提问来源于stack exchange,提问作者Milindi Senevirathne
相关产品推荐
相关产品推荐

