【问题标题】:Passing a GraphQL query to a nested map in React将 GraphQL 查询传递给 React 中的嵌套映射
【发布时间】:2021-05-29 02:51:26
【问题描述】:

解释

我正在将来自下面这个 GraphQL 查询的数据传递给一个嵌套的 map 函数,但我不断收到 node.map is not a function,即使它在一个数组中。我看不出我在这里做错了什么,所以任何指导都将不胜感激。 ;)

代码

查询

query MyQuery {
  allContentfulAwards {
    edges {
      node {
        year
        championships {
          contest
          title {
            key
            value
          }
        }
      }
    }
  }
}

数据

{
  "data": {
    "allContentfulAwards": {
      "edges": [
        {
          "node": {
            "year": "2021",
            "championships": [
              {
                "contestName": "Contest1",
                "titles": [
                  {
                    "key": "TitleA"
                  },
                  {
                    "key": "TitleB"
                  }
                ]
              },
              {
                "contestName": "Contest2",
                "titles": [
                  {
                    "key": "TitleA"
                  }
                ]
              }
            ]
          }
        },
        {
          "node": {
            "year": "2020",
            "championships": [
              {
                "contestName": "Contest1",
                "titles": [
                  {
                    "key": "TitleA"
                  }
                ]
              }
            ]
          }
        }
      ]
    }
  }
}

嵌套地图

{
  data.allContentfulAwards.edges.map(({node}) => (
    <div>
      {node.ano}
      {node.map(({championships}) => (
        <AwardsCollapse name={championships.contestName}>
          {championships.map(({titles}) => (
            <p>{titles.key}</p>
          ))}
        </AwardsCollapse>
      ))}
    </div>
  ));
}

提前致谢,
路易斯。

【问题讨论】:

  • node.championships.map(
  • 行得通!谢谢!

标签: reactjs graphql


【解决方案1】:

Luiz,JavaScript 中的map 函数与arrays 相关联。您正在尝试在node 上使用map 函数,这是一个object

使用下面的代码获得您想要的结果。

{
  data.allContentfulAwards.edges.map(({node}) => (
    <div>
      {node.year}
      {node.championships.map(({contestName, titles}) => (
        <AwardsCollapse name={contestName}>
          {titles.map(({key}) => (
            <p>{key}</p>
          ))}
        </AwardsCollapse>
      ))}
    </div>
  ));
}

~祈祷文

【讨论】:

  • 是的!我误解了认为node 在数组中就足够了。感谢您的解释,但我认为您在这里错过了一些代码。我用最终解决方案对其进行了编辑。
猜你喜欢
  • 2020-12-31
  • 2020-11-12
  • 2021-02-14
  • 2018-01-27
  • 2017-09-27
  • 2019-04-02
  • 2023-01-26
  • 1970-01-01
  • 2019-04-06
相关资源
最近更新 更多