我正在使用WP作为后端摆弄Gatsby JS,到目前为止一直很好。现在我试图拉出主菜单项的菜单,正如预期的那样。我能够真正理解的是如何让子菜单进入。
我找到的唯一相关内容是https://github.com/gatsbyjs/gatsby/issues/2426,如果我记录数据,它会给我子菜单。只是不能将它们拉进菜单。
这是我在layouts / index.js中的查询:
export const query = graphql`
query LayoutQuery {
allWordpressWpApiMenusMenusItems {
edges {
node {
name
count
items {
order
title
url
wordpress_children {
wordpress_id
title
url
}
}
}
}
}
}
`
这是我的菜单组件:
class MainMenu extends Component {
render(){
const data = this.props.menu.allWordpressWpApiMenusMenusItems.edges["0"].node.items
console.log(data)
return(
<div>
<h1>Menu</h1>
<ul>
{data.map((item) =>
<li key={item.object_slug}>
<Link to={item.url}>
{item.title}
</Link>
</li>
)}
</ul>
</div>
)
}
}
export default MainMenu
我试图摆弄
的各种变化{item.children["0"].wordpress_children.title}
但是无法让它发挥作用:/任何想法或指示都会非常感激!
答案 0 :(得分:3)
我刚测试了这个,你的逻辑声音就是你需要的另一个循环来显示子项目。所以在你的MainMenu.js中你可以这样做:
class MainMenu extends Component {
render() {
const data = this.props.menu.allWordpressWpApiMenusMenusItems.edges[0].node.items
console.log(data)
return (
<div>
<h1>Main Menu</h1>
<ul>
{data.map((item) =>
<li key={item.object_slug}>
<Link to={item.url}>
{item.title}
</Link>
<ul>
{item.wordpress_children && item.wordpress_children.map((subitem) =>
<li key={item.wordpress_id}>
<Link to={subitem.url}>
{subitem.title}
</Link>
</li>
)}
</ul>
</li>
)}
</ul>
</div>
)
}
}
这一行非常重要{item.wordpress_children && item.wordpress_children.map((subitem)
这将检查您的菜单项是否包含子项,如果是,它将映射它们并迭代它们。
我希望这适合你,我测试它并且它有效。