javascript - 在 .map() 中使用 .map() 返回噩梦
问题描述
我已经有一段时间了。所以我有一些我正在使用的嵌套导航 json。顶层导航加载良好(nav.map)一旦我进一步向下移动兔子洞,我发现自己没有返回顶层或子级导航。一切编译成功。我只是想念它吗?
return(
<List component="nav" className={classes.root}>
{nav.map(function(element) {
<ListItem
button
onClick={handleClick}
id={element.toplevel}
key={element.toplevel}
>
<ListItemText primary={element.toplevel} />
{open ? <ExpandLess /> : <ExpandMore />}
</ListItem>;
return element.children.map(function(child) {
return (
<Collapse timeout="auto" unmountOnExit>
<List component="div" disablePadding>
<ListItem button className={classes.nested}>
<ListItemIcon>
<StarBorder />
</ListItemIcon>
<ListItemText primary={child.name} />
</ListItem>
</List>
</Collapse>
);
});
})}
</List>
);
解决方案
确保您的地图回调函数实际返回 jsx 代码。您的退货声明设置不正确。
react-land 中常用的一种使 jsx 代码更具可读性的方法是箭头函数语法。这样您就可以摆脱 return 语句并返回整个函数体(它只是语法糖)。
下一件事:注意你的结束标签。我只是假设元素对象的列表项在 ListItemText 标记之后关闭,并且您的第二个映射函数在元素 ListItem 之后打开一个新列表项。jsx 一次只允许你返回一个根标签。这就是为什么(正如下面的评论所建议的)使用空<> ... </>
标签对作为根元素将解决这个问题。
return (
<List component="nav" className={classes.root}>
{data.nav.map((element) => (
<>
<ListItem
button
onClick={handleClick}
id={element.toplevel}
key={element.toplevel}
>
<ListItemText primary={element.toplevel} />
{open ? <ExpandLess /> : <ExpandMore />}
</ListItem>
{
element.children.map((child) => (
<Collapse timeout="auto" unmountOnExit>
<List component="div" disablePadding>
<ListItem button className={classes.nested}>
<ListItemIcon>
<StarBorder />
</ListItemIcon>
<ListItemText primary={child.name} />
</ListItem>
</List>
</Collapse>
))
}
</>
))}
</List>
);
沙盒链接:https ://codesandbox.io/s/material-demo-uv7c7?fontsize=14&hidenavigation=1&theme=dark
推荐阅读
- json - JSON array within an object is not being parsed
- vba - 选择 Word 文档的开头
- angular - 检测Angular 8中不同输入的焦点丢失?
- bash - Ping 子网但使用 bash 跳过范围内的一些 IP
- javascript - 在数组中查找具有特定属性的项目,然后计算有多少,然后使用相应结果的对象创建新数组
- angular - 滚动时,mat-autocomplete 选项下拉菜单不会粘住
- rxjs - 在 rxjs 管道中实现循环逻辑
- reactjs - SharePoint SPFX:无法获取属性“上下文”
- java - java上的非法参数异常
- arduino - Arduino 字节 [] 到字符串