使用道具切换导航列表,嵌套 array/object

Using props to toggle nav list, with nested array/object

我有两个组件正在加载一些数据。我想要的是这样输出的链接:

但它正在这样做

我能理解这与我的地图的使用以及我返回数据的方式有关,但我不知道如何修复它并让点击处理程序为群组工作。

const navList = [
  {
    "GroupName": "group1",
    "links": [
        {"name": "link0a","id": "434"},
        {"name": "link0b","id": "342"}
    ]
},
{
    "GroupName": "group2",
    "links": [
        {"name": "link1a","id": "345"},
        {"name": "link1b","id": "908"}
    ]
  }
]

class Nav extends Component {

  constructor(props) {
    super(props);
    this.state = {
      openItem: null
    }

    this.toggleClick = this.toggleClick.bind(this);
  }

  toggleClick(item, index, event) {
    event.preventDefault()
    if (index === this.state.openItem) {
        this.setState({openItem: null})
    } else {
        this.setState({openItem: index})
    }
 }

 render() {
    return (

            <ul>
                {navList.map((section, i) => {
                    const links = section.links.map((item, index) => {
                        const isOpen = this.state && this.state.openItem === index

                        return <NavItem title={section.GroupName} children={item.name} onClick={this.toggleClick.bind(null, item, index)} open={isOpen} />
                    })

                    return links
                })}
            </ul>

    )
  }
}

class NavItem extends Component {
  render() {
    const toggleClass = this.props.open ? 'is-open' : ''
    return (
        <li>
            <h2 onClick={this.props.onClick}>{this.props.title}</h2>
            <ul className={toggleClass}>
                <li>{this.props.children}</li>
            </ul>
        </li>
    )
  }
}

export default NavItem

NavLink 中删除 {this.props.title} 并将其移动到您上面发布的 render() 函数中。否则,每次呈现 NavLink 时,都会显示标题。不要忘记也移动您的 onClick 处理程序。

这是一个基于您的 jsfiddle 的工作示例:https://jsfiddle.net/lustoykov/n21Lspm3/1/