首页 > 解决方案 > Gatsby / React map 不是函数(带有示例沙箱)

问题描述

我正在使用 Gatsby / React 页面,并尝试呈现动态导航。我对 React 很陌生,想弄清楚为什么 myArray不能被迭代.map

这似乎很明显,但是......

https://codesandbox.io/s/keen-platform-gy97p?file=/src/components/layout.js:891-923

布局.js

    const Layout = ({ children }) => {
      const navItems = [
        { title: "Hero", url: "#sec1", classes: "act-link", subnav: [] },
        { title: "About", url: "#sec2", classes: "", subnav: [] },
        { title: "Resume", url: "#sec3", classes: "", subnav: [] },
        { title: "Projects", url: "#sec5", classes: "", subnav: [] },
        { title: "Clients", url: "#sec6", classes: "", subnav: [] }
      ]
    
     return (
        <>
       
            <h1>Navigation goes here</h1>
            <nav>
              <Navigation {...navItems} />
            </nav>
            <main>{children}</main>
        </>
      )
    }

导航.js

    import NavigationItem from "./navigation-item"
    
    const Navigation = navItems => {
      console.log(navItems)
      return (
        <nav>
          Here should appear the NavItems:
          {navItems.map(item => (
            <NavigationItem {...item} />
          ))}
        </nav>
      )
    }

export default Navigation

导航-item.js

    import React from "react"
    const NavigationItem = (item, index) => {
      return (
        <li key={index}>
          <a className="scroll-link" href={item.link}>
            {item.title}
          </a>
        </li>
      )
    }
    
    export default NavigationItem

任何建议将不胜感激,谢谢!

标签: javascriptreactjsecmascript-6gatsby

解决方案


navItems在您的Navigation组件中是一个对象而不是一个数组,并且对象没有.map方法。这是潜在的解决方法:

布局.js

const Layout = ({ children }) => {
  const navItems = [
    { title: "Hero", url: "#sec1", classes: "act-link", subnav: [] },
    { title: "About", url: "#sec2", classes: "", subnav: [] },
    { title: "Resume", url: "#sec3", classes: "", subnav: [] },
    { title: "Projects", url: "#sec5", classes: "", subnav: [] },
    { title: "Clients", url: "#sec6", classes: "", subnav: [] }
  ]

 return (
    <>
   
        <h1>Navigation goes here</h1>
        <nav>
          <Navigation navItems={navItems} />
        </nav>
        <main>{children}</main>
    </>
  )
}

导航.js

import NavigationItem from "./navigation-item"

const Navigation = ({ navItems }) => {
  console.log(navItems)
  return (
    <nav>
      Here should appear the NavItems:
      {navItems.map(item => (
        <NavigationItem {...item} />
      ))}
    </nav>
  )
    }

export default Navigation

推荐阅读