我正在构建一个多级菜单,并想使用递归来显示菜单。类似于here中的多级下拉菜单。
在我的代码中,菜单如下所示。
const menu = [
{
name: 'Man Utd',
menu: [
{
name: 'Stadium'
},
{
name: 'About'
}
]
},
{
name: 'Liverpool',
menu: [
{
name: 'Contact'
}
]
}
];
然后我将其传递给我的react组件。
const Dropdown = ({ menu }) => {
const renderMenu = (items) => {
return items.map((item: any, index: any) => {
return (
<div>
{item.menu ? renderMenu() : item.name}
</div>
)
})
}
return (renderMenu(menu));
}
这里的问题是它导致无限循环。
谁能建议我如何改善这一点?
最佳答案
递归呈现菜单时,需要将item.menu
作为参数传递给renderMenu
。
例
const menu = [
{
name: "Man Utd",
menu: [
{
name: "Stadium"
},
{
name: "About"
}
]
},
{
name: "Liverpool",
menu: [
{
name: "Contact"
}
]
}
];
const Dropdown = ({ menu }) => {
const renderMenu = items => {
return items.map((item: any, index: any) => {
return (
<div style={{ marginLeft: 10 }}>
{item.name}
{item.menu ? renderMenu(item.menu) : null}
</div>
);
});
};
return <div>{renderMenu(menu)}</div>;
};
ReactDOM.render(<Dropdown menu={menu} />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>