Graphql 查询返回 10 位数字而不是查询数据

Graphql query returning 10 digit number instead of query data

我有这个着陆页是使用 gatsby-node.js 中的页面查询生成的,理想情况下会列出类别 x 中包含的所有产品。通过页面查询,我在上下文中传递类别名称。

    createPage({
        path: `/landings/${pathName}`,
        component: path.resolve(`src/templates/product-pages/landing.js`),
        context: {
            data: cat.name,
        },

在 Landing 函数中,我将类别名称传递给另一个名为 Products 的函数,该函数包含一个查询,列出父类别的所有子产品并将它们传回 Landing。

const Landing = (data) => {
    const title = data;
    return (
        <div>
            <h1>{title.pageContext.data}</h1>
            <Products category={"product category"}/>
        </div>
    )
}
export default Landing;
const Products = ({category}) => {   
    console.log(query);
    return (
        <div>            
        </div>
    )
}

export const query = graphql`
query {
    allTaxonomyTermProductCategories(filter: {name: {in: "Backlit Film"}}) {
      nodes {
        relationships {
          commerce_product_variation__acyrlic {
            sku
          }
          commerce_product_variation__vinyl {
            sku
          }
        }
      }
    }
  }
`;

export default Products;

举个例子,我正在传递“背光电影”,但希望它传递从 Landing 获得的类别名称。我遇到的第一个问题是 Products 函数返回一个 10 位哈希码 2403848351,我知道这与直接调用查询有关,但不确定如何修复它。

那样你的方法行不通。您正在尝试创建一个 page query,正如名称所示,它仅适用于顶级组件(页面),在您的情况下,Landing 组件,而不是 Products.

您要做的是将 GraphQL 查询向上移动到 Landing 组件,获取结果,并将产品向下钻取到 Products。类似于:

const Landing = ({data}) => {   
        return <div>
            <h1>{title.pageContext.data}</h1>
            <Products products={data.allTaxonomyTermProductCategories.nodes}/>
        </div>
}

export const query = graphql`
query {
    allTaxonomyTermProductCategories(filter: {name: {in: "Backlit Film"}}) {
      nodes {
        relationships {
          commerce_product_variation__acyrlic {
            sku
          }
          commerce_product_variation__vinyl {
            sku
          }
        }
      }
    }
  }
`;

export default Landing;

或者,您可以使用 useStaticQuery hook,这将允许您在低级组件中使用查询(在本例中为 Products),问题是不接受动态参数(因此 static 名称)


关于“10位数字”。您正在打印 query,其中只是查询的一个实例。不是包含的数据。您的数据将存储在 props.data 中,这就是为什么在我的方法中我将 props 解构为 data ({data}).