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
相关产品推荐
相关产品推荐

