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

React嵌套循环问题:从JSON构建导航时子循环未执行

解决React导航组件子菜单循环不执行的问题

嘿,我一眼就瞅出你代码里的关键问题啦!子菜单的map循环没被React当作JSX表达式执行,直接被当成普通文本输出了,这才导致子项压根没渲染出来。

问题根源

在JSX语法里,所有JavaScript逻辑(比如数组遍历、条件判断)都必须包裹在{}中,不然React会把它当作字符串处理。你代码里的menu.children.map(...)直接写在了<DropdownMenu>标签内部,没加{},所以根本没触发循环,反而被当作HTML文本解析了。

另外还有个小细节要注意:你子菜单的Link里用了menu.title,这会导致所有子项都显示父菜单的标题,应该改成children.title才对~

修正后的代码

render() { 
  return menuLocal.items.map((menu, i) => { 
    return ( 
      <div key={i}> 
        {(menu.children) ? ( 
          <UncontrolledDropdown nav inNavbar> 
            <DropdownToggle nav caret> 
              {menu.title} 
            </DropdownToggle> 
            <DropdownMenu right> 
              {/* 给map逻辑加上{}包裹,同时修正子项的内容字段 */}
              {menu.children.map((children, i) => { 
                return (
                  <NavItem key={'children-'+i}> 
                    <Link to={children.object_slug} className="nav-link">{children.title}</Link> 
                  </NavItem>
                )
              })} 
            </DropdownMenu> 
          </UncontrolledDropdown> 
        ): (
          <NavItem> 
            <Link to={menu.object_slug} className="nav-link">{menu.title}</Link> 
          </NavItem> 
        )} 
      </div> 
    ) 
  }) 
}

关键修改点

  • 给menu.children.map(...)加上外层{},让React识别这是需要执行的JS逻辑
  • 子菜单的Link中,把menu.title改为children.title、menu.object_slug改为children.object_slug,确保子项显示自身的内容
  • 在map的回调函数里显式添加了return(也可以用括号包裹JSX实现隐式return,效果一致)

这样修改后,子菜单的循环就能正常执行,下拉组件里的子项也会正确渲染啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:55