【问题标题】:How can I reference a query imported from Airtable?如何引用从 Airtable 导入的查询?
【发布时间】:2021-09-15 18:47:31
【问题描述】:

在围绕格式和变量进行了几天的迭代后,我仍在努力让这段代码运行并不断收到类似于“无法读取未定义的属性(读取'map')”的各种错误

我只是开始学习 Javascript 和 Gatsby 的基础知识,所以我可能会错过一个绝对的咆哮者吗?对我放轻松。

import React from "react"
import { graphql } from "gatsby"

//export default function Home() {
//  return <div>Hello world!
//<p>Is this working?</p>
//<h1>{process.env.AIRTABLE_API_KEY}</h1>
//<p>Is this working 2?</p>
//  </div>
//  
//}

export default ({data}) => {
  const allAirtableData = data.allAirtable.nodes;
  console.log(allAirtableData)
  return (
    <div>
          <h1>'Hello World'</h1>
         {
            allAirtableData.map((node) => (
                 <p>
                      <img src={node.data.Model_Type} alt="hills something" />
                      <a href={`/${node.recordID}`}>Click Here</a>
                  </p>
              ))
         }
    </div>
  )
}

export const query = graphql`
query AirtableQuery {
  allAirtable {
    edges {
      node {
        recordId
        data {
          Model_Type
        }
      }
    }
  }
}  
`

【问题讨论】:

    标签: gatsby airtable


    【解决方案1】:

    您的 GraphQL 查询显示如下结构:

      allAirtable {
        edges {
          node {
            recordId
            data {
              Model_Type
            }
          }
        }
      }
    

    allAirtable.edges.node 的结果是什么。

    但是,您正在直接访问node

    const allAirtableData = data.allAirtable.nodes;
    

    改成:

    const allAirtableData = data.allAirtable.edges.nodes;
    

    其余的代码应该单独工作。

    【讨论】:

    • 应该是 data.allAirtable.edges 而不是 data.allAirtable.edges.nodes - 即用边替换节点
    • nodes 是数组,可迭代变量,如果应用了您的解决方案,您需要将循环更改为allAirtableData.map(({node}) 以解构可迭代变量,这也是另一个解决方案跨度>
    • 太完美了,谢谢 Ferran。我以为我已经尝试了所有的变种,但这个成功了!
    • 我很高兴它有帮助。如果问题已解决,请考虑接受/支持答案以关闭问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2019-11-29
    相关资源
    最近更新 更多